HTTP 会话跟踪与状态管理: cookie 与 session

HTTP最大的缺点:无状态
因此,HTTP的状态管理(会话机制)用来弥补这一缺陷

无状态,因此每个请求都是独立的
可能导致后续请求需要重传,且需求累增,力大

session与cookie叫做会话跟踪机制

一小段文本信息

  • 服务器需要记录用户状态,就向客户端颁发一个Cookie

  • 客户端浏览器会把Cookie保存起来,当浏览器再请求该网站时,浏览器把请求的网址连同cookie一同发送给服务器,服务器检查该cookie来辨认用户状态

简单地说,如果服务器端发送的响应头内有 Set-Cookie 的字段,那么浏览器就会将该字段的内容保持到本地。当下次客户端再往该服务器发送请求时,客户端会自动在请求头中加入 Cookie 值后再发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到该用户的状态信息。

session

  • session是另一种记录客户状态的机制,保存在服务器上。客户端浏览器访问服务器的时候,服务器以某种形式把客户端信息存储在服务器上,也增加了一些服务端的存储压力(我记得有的用数据库存了session)

  • 客户端浏览器再次访问时,只需要从该session中查找该客户的状态就可以了

cookie机制是通过检查客户身上的通行证来确认客户身份
session机制就是通过检查服务器身上的客户明细表来检查客户身份

首次访问生成sessionId和Session,服务器保存到映射区
返回给客户端SessionId,保存到cookie保存区

后续访问,cookie保存区携带SessionID,服务器据此查找对应的session,进行其他操作
然后返回处理结果

如果没找到session,或者客户端发来的cookie没有sessionID,那么生成一个新的cookie
\session通过cookie把sessionID存储到客户端
90%以上的网站都是这样支持的

但是cookie可以被认为篡改,因此还有另外一种保存SessionID的方法

  • 这种方法就是URL重写,把查询sessionID当做一个参数写在url上
  • 隐藏表单,提交的时候传给服务器

session超时失效

cookie理论上可以永久存储

  • 为了防止内存溢出,服务器把很久没活跃的session删除,即是session的超时失效
  • 程序调用HttpSession.invalidate
  • 服务器被异常中止

http保存状态的两种机制

  1. 存放位置不同
    session存储在服务器,cookie存储在客户端
  2. 安全性不同,隐私策略不同
    cookie存储在客户端,容易被篡改,存在敏感信息泄露的风险。或者把cookie信息加密,在服务器解密,保证cookie信息只有读的懂
    session存储在服务器,安全性比较好
  3. 有效期上的不同
    一、设置cookie有效时间,可以设置很久很久过期,在浏览器保存很长时间
    二、服务端会定时清除session,防止对服务器造成过多压力。session依赖于类似sessionID这样的cookie,而cookie的sessionID默认是-1,只要关闭浏览器,这个sessionID就失效了
  4. 对服务器造成的压力不同
    session保存在服务器端,并发量大的时候服务器压力大
    cookie保存在客户端,压力不大
posted @ 2022-05-25 14:02  IslandZzzz  阅读(67)  评论(0编辑  收藏  举报