zoukankan      html  css  js  c++  java
  • Cookie与Session

    HTTP是一种不保存状态的协议,也就是无状态协议。Http自身不对请求和响应之间的通信状态做出保存,也就是说在在HTTP这个级别,协议对于发送过的请求和响应都不做出保存。

    事实上:由于通常一台服务器会服务于几万个甚至更多的客户(客户端),如果把所有的客户端信息都记录下来,那么会大大增加服务器的压力,HTTP协议是无状态的,也就意味着服务器没法记住某个客户发出的请求和做出的响应,这样的话客户下一次再次请求时,服务器也无法识别这个客户,因此又会做出新的响应。比如登录时,客户明明已经登录过了,但是跳转到网站的其他页面,由于是服务器是无状态的服务器还得请求一次。为了实现期望的保持状态功能,于是引入了cookie技术。

    Cookie是保存在客户端的小段文本,随着客户端每一个请求发送该url下的所有cookies到服务器端。

    cookies_1.png

    Cookie的详细工作流程如下:cookie_0.png

    1、第一次请求时,浏览器中是没有cookie信息的。

    cookies_2.png

    2、服务器接收到请求后,会首先检查是否存在Cookie,如果没有Cookie,会生成一个Cookie。在响应头中Set-Cookie中生成Cookie信息。生成的Cookie文本中,存在一个sessionId,服务器会记录下来这个sessionId。

    cookies_3png.png

    3、客户端再次请求时,浏览器会自动将Cookie信息添加到请求头上,服务器接到请求会根据sessionId来判断身份。

    cookies_4png.png

    Session

    Session保存在服务器端(在服务器端生成),通过唯一的sessionId来区别每一个用户。sessionId随每个请求发送到服务器(sessionId实际上是Cookie中的一个字段),Session实际上是一个保存在服务器的数据表,每一个sessionId对应一个用户。通过Cookie获取到SessionId,然后再通过session的key获取session值。

    session_id.png

    思考:如果不使用Cookie能不能实现维持会话?

    仔细分析Cookie的功能,我们使用Cookie最重要的就是保存了一个sessionId然后每次请求时,在请求头中携带过去。如果没有了Cookie,那么我们可以不可以通过其他的手段把这个sessionId发送到服务端,并通过其他手段再吉首这个sessionId。比如我们可以通过在Url后面添加上sessionId,这样的话服务器端也能获取到sessionId,然后 服务端再将sessionId返回回来,客户端再进行保存。这样的话也能够实现类似于Cookie的功能,但是这样不太安全,因为sessionId直接在Url后面是可见的,很容易就被模仿了。也存在一个方法提高安全性,那就是服务器产生一个tooken,每请求一次tooken发生变化,tooken只能使用一次,这样也能提高安全性。

  • 相关阅读:
    leetcode206题实现反转链表(c语言)
    V22017编写C/C++时没有与参数列表匹配的重载函数实例
    3DMAX导出到Unity坐标轴转换问题
    ihandy2019笔记编程真题
    模糊数学中合成算子的计算方法
    点击Button按钮实现页面跳转
    做HTML静态页面时遇到的问题总结
    pip换源
    Python正课146 —— DRF 进阶7 JWT补充、基于权限的角色控制、django缓存
    Python正课145 —— DRF 进阶6 自定制频率、接口文档、JWT
  • 原文地址:https://www.cnblogs.com/yinhaiying/p/11994043.html
Copyright © 2011-2022 走看看