Cookie与Session
2019-03-18 本文已影响0人
旦暮何枯
会话
会话是一种持久网络协议,在用户(或用户代理)端和服务器端之间建立关联,从而起到交换数据包的作用机制。
Cookie
会话数据保存在浏览器客户端
- 会话数据
- 保存在客户端
- key-value 形式
工作流程
识别返回用户包括三个步骤:
- 服务器脚本向浏览器发送一组 Cookie。例如:姓名、年龄或识别号码等。
- 浏览器将这些信息存储在本地计算机上,以备将来使用。
- 当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookie 信息发送到服务器,服务器将使用这些信息来识别用户。
cookie 的生命周期
会话周期:
cookie 数据保存在内存中,浏览器关闭后,会话失效。
setMaxAge 设置 cookie 有效期;默认 30 min
cookie 数据保存在硬盘中,浏览器关闭后依然后效,直到超出有效期
cookie 缺陷
大小和数量的限制:
一般每个站点最多保存 20 个。大小在 4k 以内。
数据安全性:
http 中的 cookie 为明文传递。
Session
会话数据保存在服务器端
session 在不同场合有不同的定义,此文主要为 HttpSession.
工作原理
- 客户端发送一条 http 请求到 服务器端;
- 服务器端生成一个 Session 对象,保存一些客户端数据到 Cookie 并与 SessionId 绑定,返回给客户端;
- 客户端再次发送一条包含 SessionId 的 http 请求,服务器端根据 SessionId 与服务器端保存的对象绑定。
Session 的生命周期
setMaxInactiveInterval 设置有效期;默认 30 min
主动调用接口使 session 失效; invalidate 接口。
session.setMaxInactiveInterval(2 * 60); // 设置 session 失效时间
session.invalidate();//调用 session 失效接口
通过部署描述符配置有效期
部署描述符设置 session 失效时间;单位 min
<session-config>
<session-timeout>2</session-timeout>
</session-config>
总结
cookie:
- 明文存储 客户端
- 生命周期累计时间
- 每个站点 20 个 cookie,单个小于 4k
session: - 存放服务器端
- 生命周期间隔时间
- 存放于服务器端,避免大容量对象存储
项目地址:https://github.com/wengfe/JAVA/tree/master/COOKIEPROJECT