Web 会话管理(追踪)
背景:HTTP 是无状态协议,一个请求,一个响应,之后谁也不认识谁。
为了标识、记录每个用户的用户状态,根据用户状态,推荐个性化服务,描绘出“用户画像”,出现了会话管理技术(前三个只支持Web)
cookie
浏览器提供,在【客户端存储】用户状态session
服务器提供,在【服务端存储】用户状态URL 编码(重写)
对 cookie 的替代方案token (令牌)
HTTP 请求头,通用技术(浏览器、移动端、桌面)
Cookie
- 浏览器提供,在【客户端存储】用户状态
- 服务器创建,发送到浏览器
- 以文本格式 存储在浏览器(本地磁盘)- 用户可以
清除
/禁止
- 浏览器在请求头中携带发给服务器
优点:用户状态 存储 在客户端
缺点:文本格式、大小受限 [4KB]、请求头、用户可以清除
/ 禁止
实际中,自动登录、浏览记录使用cookie
Session
服务器提供,在【服务端存储】用户状态
基于 cookie 实现的, 如果禁止了cookie,则会话 session 默认无法工作
- 服务器检查 HTTP 请求头是否携带 jsessionid 的 cookie 是否存在
- 不存在
- 创建一个 jsession 的临时 cookie 加入到响应头
- 服务器内存空间创建一个对应的 HashMap<String, Object>,用来存储用户数据
- session 会话操作:添加、替换、删除、失效 都是操作该散列表
- 占了服务器资源,就有了“超时”,即有效期,默认 30 分钟,倒计时结束,会话超时,回收,超时前有新的请求就实现续约
- 存在
- 重置timeout(超时)的时间,完成会话的续约
- 由 jsessionid 找到对应的 HashMap 进行操作
URL 编码
为了在用户禁止cookie时,session还可以工作。