HTTP 会话跟踪与状态管理: cookie 与 session
HTTP最大的缺点:无状态
因此,HTTP的状态管理(会话机制)用来弥补这一缺陷
无状态,因此每个请求都是独立的
可能导致后续请求需要重传,且需求累增,力大
session与cookie叫做会话跟踪机制
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保存状态的两种机制
- 存放位置不同
session存储在服务器,cookie存储在客户端 - 安全性不同,隐私策略不同
cookie存储在客户端,容易被篡改,存在敏感信息泄露的风险。或者把cookie信息加密,在服务器解密,保证cookie信息只有读的懂
session存储在服务器,安全性比较好 - 有效期上的不同
一、设置cookie有效时间,可以设置很久很久过期,在浏览器保存很长时间
二、服务端会定时清除session,防止对服务器造成过多压力。session依赖于类似sessionID这样的cookie,而cookie的sessionID默认是-1,只要关闭浏览器,这个sessionID就失效了 - 对服务器造成的压力不同
session保存在服务器端,并发量大的时候服务器压力大
cookie保存在客户端,压力不大
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)