Http协议 - 状态维持 - cookie,session,token

说明

  • web程序是通过HTTP协议与服务器通讯,而HTTP协议本身是无状态的协议,如果没有其它辅助机制,服务器无法唯一标识HTTP请求,对于请求处理结果没有记忆能力,无法保存历史请求处理信息,一些需要持续保存一些状态的需求将无法实现,例如:用户登录功能,如果无法保存登录状态,意味着后续每次请求都需要重新登录一次,而不是只需要判断一下是否已登录,因此需要一些辅助机制来实现web程序的状态维持工作。
  • cookie,session,token是常用的状态维持机制。

cookie

  • 状态维持最简单的方式就是数据重传,每次HTTP请求都附带一些状态相关的信息,这种方式就是cookie。

特征

  1. cookie 英文意思是“小点心”,体现了cookie预期是存储少量信息,由于每次HTTP请求都需要重传这部分数据,数据量越小越好;在浏览器cookie数量受到限制,一个浏览器能创建的 Cookie 数量最多为300个,并且每个不能超过4KB,每个 Web站点能设置的Cookie总数不能超过20个。
  2. 由于HTTP协议是字符串协议,cookies保存在HTTP头部信息中,因此cookies只支持字符串数据,或者可以转换成字符串的数据。
  3. 由于cookie机制的目标是维持会话状态,cookies数据具有临时性,其生命周期,浏览器运行时cookies存储在浏览器内存中(有些浏览器会同时保存在安装目录的文本文件中),当用户结束其浏览器对话时,即终止的所有cookies,并且用户可对cookies的生命周期进行设置。
  4. 客户端和服务器都能对cookies进行修改,有一定的安全隐患,客户端web程序可通过JavaScript对cookies进行修改和设置,而服务器可以通过response的http头部信息中的set-cookies项对客户端保存的cookies进行设置,可通过Wireshark等抓包工具抓取到HTTP协议中的cookie数据,甚至进行Cookie劫持。
  5. cookies 不是用来保存web程序本地数据的机制,由于客户端可修改和设置cookies,早期该机制容易被滥用,用来保存一些与状态维护无关的客户端本地数据。
  6. 浏览器可以禁用Cookie,禁用Cookie后,也就无法享有Cookie带来的方便。

session

  • session称为“会话控制”,是状态维持的另一种方式,解决和改善了cookie方式的一些问题和缺陷,该机制是在服务器端存储状态相关的数据,通过session id进行唯一标识,客户端只需要每次请求附带session id即可实现状态维持。

特征

  1. session方式每个会话的所需数据保存在服务器端,默认是内存中,也可以保存在其它介质中,例如:缓存服务中,因此Session需要占用一定的服务器性能,Session过多,增加服务器压力。
  2. session id常见保存在cookies中,但是并不是必须保存在cookies中,还可以通过其它方式,例如:HTTP头,Body数据等进行传递。
  3. 由于状态维持需求本身就具有一定的时效性,session也有其生命周期,如果该用户还没有会话,则 Web 服务器将自动创建一个Session对象,当会话过期或被放弃后,服务器将清除该session对象。
  4. Session比Cookie更具有安全性。

token

  • token 称作令牌,cookie和session已经可以实现大部分情况下的状态维持需求,但是依然有些情况,cookies和session使用不便,需要有其它机制辅助session机制或者替代,例如:传递session id或者其它状态相关信息,情况如下:
  1. 浏览器禁用Cookie。
  2. 通常session的cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时。
  3. 非web程序使用http协议与服务器进行通信无法使用cookie机制。
  4. 跨程序调用。

特征

  1. token通过HTTP协议进行传输,本质上是包含一些信息的字符串数据。
  2. token可以通过HTTP头或者Body等多种方式传输。
  3. 相比cookie,session机制,token机制更轻量和更有独立性。

token标准 - jwt

  • jwt:JSON Web Token
  • 待续
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值