3 分钟带你深入理解 Cookie、Session、Token

作者 : 开心源码 本文共2238个字,预计阅读时间需要6分钟 发布时间: 2022-05-13 共202人阅读

经常会有客户咨询,CDN 能否会传递 Cookie 信息,能否会对源站 Session 有影响,Token 的防盗链配置为什么总是配置失败?为此,我们就针对 Cookie、Session 和 Token,来谈谈它们的用处是什么。

Cookie

Cookie 尽管听起来不是技术名词,但却为互联网提供一项至关重要的功能:“记录访问过的网站或者正在访问的网站。”

HTTP 协议是无状态的,服务器不知道浏览器上一次访问做了什么,也无法对客户会话进行跟踪连接。为此就引入 Cookie 技术,Cookie 是由服务器发送到用户端浏览器的一小段文本文件,包含了网站访问活动信息。例如首选项语言或者其它少量设置。浏览器会保存这些数据,并在用户端下次访问该网站时调用它们,提供更方便和个性化的访问体验。

举个简单的例子:我们在浏览购物网站时,会将选购商品增加到购物车。假如没有 Cookie 技术,由于 HTTP 是无状态协议,它不会知道之前增加选购哪些商品,放在哪个客户的购物车中。而应用 Cookie 技术后,Cookie 才会将这些信息在会话中发送给服务器,服务器读取 Cookie 信息就知道是哪些客户购物车中增加的商品信息。

Cookie 的属性,就意味着它会暴露客户的少量隐私。Cookie 存放了用户端留在网站的信息,它会根据客户喜好和访问信息记录,推送少量客户喜欢的信息。我们在浏览网页中,常常看到在线广告,大多数在线广告就是依附 Cookie 技术对用户端浏览器进行推广,在网页中显示相关度较高的广告。

Session

Session 表示的是 C/S 架构中服务器和用户端一次会话的过程,用来保存认证客户信息。Session 是一种 HTTP 存储机制,目的是为无状态的 HTTP 提供持久机制。这样客户在应用程序的 Web 页面跳转时,就不会由于 HTTP 无状态的性质导致对话丢失,从而使访问会话一直保持下去。

服务器端存储客户数据信息。必需知道每个客户分别是谁,那么每个客户必需有个名字,或者者说是 ID,这就是所谓的“Session ID”。客户请求后,服务器会生成 Session ID 并返还,后续客户的每次请求,都会带上这个 Session ID,而后服务器通过在数据库的搜索对应,找到该客户及其相关信息,比方对应的客户是登录状态还是超时登出之类的。

信息状态存在服务器端,客户只要要留存 Session ID。大多数时候通过 Cookie 传递存放,当然也可以用 ajax 传,存 Local Storage 或者 Session Storage 或者 IndexDB 或者 Web SQL,反正只需客户拿到并存着就行,甚至可以用 URL 重写的方式传递。

比方:二狗子在 www.a.com/login.php 网站中登陆,同时希望 www.a.com/index.php 也是登陆状态。但这是两个不同的页面和 HTTP 请求,并且 HTTP 是无状态协议,是无关联的,也就无法在 /index.php 中读取 /login.php 登陆状态。于是我们即可以依靠 Session 会话技术,它通过保持会话的方式,将屡次 HTTP 请求关联到一个会话中,保持数据传输的完整性。

Token

Token 是“令牌”的意思,主要是用于身份的验证方式。以又拍云的 Token 防盗链为例,Token 通过对时间相关的字符串进行签名,将时间、签名信息通过肯定的方式传递给 CDN 节点服务器作为判定依据,CDN 边缘节点依据商定的算法判断来访的 URL 能否有访问权限。假如通过,执行下一步;假如不通过,响应 HTTP 403 状态码或者者通过 302 跳转到其余 URL。

如上图所示,整个 Token 防盗链的实现需要如下几个部分来配合:

  • 用户端:负责发送原始请求给用户端业务服务器以及发送带签名的 URL 给 CDN 节点进行验证;

  • 业务服务器:根据商定的算法生成带 _upt 参数的 URL 返回给用户端;

  • CDN 节点:负责和用户端进行时间、签名校验;

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 值并发送给服务器进行访问验证。

读完这篇文章,我相信你已经对 Cookie、Session、Token 有详尽的理解了。

推荐阅读

Apache APISIX 微服务网关极致性能架构解析

为什么 HTTPS 比 HTTP 安全

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 3 分钟带你深入理解 Cookie、Session、Token

发表回复