参考链接
- https://www.upyun.com/tech/article/515/3%20%E5%88%86%E9%92%9F%E5%B8%A6%E4%BD%A0%E6%B7%B1%E5%85%A5%E4%BA%86%E8%A7%A3%20Cookie%E3%80%81Session%E3%80%81Token.html
Cookie-会话保持
Cookie 提供一项至关重要的功能:“记录访问过的网站或正在访问的网站。”
HTTP 协议是无状态的,服务器不知道浏览器上一次访问做了什么,也无法对用户会话进行跟踪连接。为此就引入 Cookie 技术,Cookie 是由服务器发送到客户端浏览器的一小段文本文件,包含了网站访问活动信息。例如首选项语言或其它一些设置。浏览器会保存这些数据,并在客户端下次访问该网站时调用它们,提供更方便和个性化的访问体验。
Session
Session 表示的是 C/S 架构中服务器和客户端一次会话的过程,用来保存认证用户信息。Session 是一种 HTTP 存储机制,目的是为无状态的 HTTP 提供持久机制。这样用户在应用程序的 Web 页面跳转时,就不会因为 HTTP 无状态的性质导致对话丢失,从而使访问会话一直保持下去。
服务器端存储用户数据信息。必须知道每个用户分别是谁,那么每个用户必须有个名字,或者说是 ID,这就是所谓的“Session ID”。用户请求后,服务器会生成 Session ID 并返还,后续用户的每次请求,都会带上这个 Session ID,然后服务器通过在数据库的搜索对应,找到该用户及其相关信息,比如对应的用户是登录状态还是超时登出之类的。
Cookie 与 Session 关系
信息状态存在服务器端,用户只需要留存 Session ID。大多数时候通过 Cookie 传递存放,当然也可以用 ajax 传,存 Local Storage 或 Session Storage 或 IndexDB 或 Web SQL,反正只要用户拿到并存着就行,甚至可以用 URL 重写的方式传递。
Token
Token 的实现方式
在了解 Token 实现需要客户端、服务器端、CDN 节点来配合后,再来简单看下 Token 具体是如何实现的:
步骤1:客户端业务服务器生成验证信息,验证信息的生成由业务服务器负责,具体的加密过程需要确认如下事项:
确认过期时间的格式,默认采用 UNIX 时间戳格式
确认验证信息中的密文,用户计算验证信息,需要和 CDN 平台约定
确认验证信息时加入的参数,默认为 URL 的路径部分
根据上文的算法说明计算验证信息,其中请求 URL 中的验证参数为 _upt
步骤2:CDN 节点验证过程
根据约定解析取出过期时间,和当前 CDN 节点服务器时间进行比较,确认请求是否过期
根据上文约定好的算法计算方式,计算出 MD5 加密串后,和 URL 中的加密串进行比较,验证加密串是否一致
如果以上两个步骤都验证通过,请求才会被认为是合法的,这时 CDN 会请求资源响应给客户端,否则会被认为是非法请求,直接响应 HTTP status code 403。
总结
Cookie 存放在客户端,用来保存客户端会话信息。由于存储在客户端,它的安全性不能完全保证。
Session 存放在服务器端,用户验证客户端信息。如果把 Cookie 比喻成电话号码,那么 Session 就是记录所有人信息的电话簿。由于存储在服务器,安全性有一定的保证。
Token 是一种认证方式。通过预定的规则来计算 Token 值并发送给服务器进行访问验证。