1. 区别
它们都是应对 http 无状态,为了保存用户状态信息而引入的
检查角度不同
- cookie 是通过检查客户身上的“通行证”来确定客户身份
- session 是通过检查服务器上的“客户明细表”来确认客户身份,
session 相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表
存储位置与安全性不同
- session 存储在服务器端;
- cookie 存储在用户浏览器,容易被恶意查看
因此,session 存储的信息更安全
数据复杂性不同
- cookie 只能存 ASCII 字符串
- session 可以存储任意类型数据
大访问量区别
- cookie 最大长度 4kb,很多浏览器都限制一个站点最多保存20个 cookie,就是为了不在传输cookie的过程中耗费太多网络资源
- session 没有限制,session 会在一定时间内保存在服务器上,访问量大时,会占用内存,影响性能
2. 应用场景
cookie 和 session 都是一种会话跟踪技术,其中,session 技术实现依赖于 cookie,因为 session 需要传递一个用户 sessionID 给用户,下次用户访问时,会将 sessionID 回传给服务器,这两个阶段都需要通过 cookie 来传递 ID
同时除了通过 cookie 实现 session 也可以通过另外两种技术实现 session :
- URL 重写
- 隐藏表单域
cookie 可以应用于:
- 会话状态管理(用户登录状态、购物车信息等)
- 个性化设置(用户自定义设置主题等)
- 浏览器行为跟踪(记录用户使用偏好等)
对于 session 来说这些都是可以做到的
但考虑的安全和服务器性能,一般来把用户的登录账户个人信息存储在 session,保存到服务器;而用户自定义主题等安全性不是很高的则存储在 cookie