cookies,session,token的区别和使用(接口参考)
1.依据和使用
基于cookie:
因cookie的验证是有状态的,验证流程:
- 用户输入登陆凭据;
- 服务器验证凭据是否正确,并创建会话,然后把会话数据存储在数据库中;
- 具有会话id的cookie被放置在用户浏览器中;
- 在后续请求中,服务器会根据数据库验证会话id,如果验证通过,则继续处理;
- 一旦用户登出,服务端和客户端同时销毁该会话。
cookie存在本地,根据有效期等来判断用户信息有效性,易被截取和修改,已慢慢淘汰。
缺点:有数量限制
其他浏览器存储位置:1
基于token:
- 用户输入登陆凭据;
- 服务器验证凭据是否正确,然后返回一个经过签名的token;
- 客户端负责存储token,可以存在local storage,或者cookie中;
- 对服务器的请求带上这个token;
- 服务器对JWT进行解码,如果token有效,则处理该请求;
- 一旦用户登出,客户端销毁token。
基于session
session:存储在服务器。服务器生成信息后,保存在服务器,返回浏览器sessionID,
之后每次浏览器请求携带seesionID,服务器通过判断sessionID来判断会话是否存在,具体使用也是cookie会话机制中使用sessionID。
如果没有第三方网站的接入等,使用session除了占用服务器资源,其他没什么影响不用token也可以。
缺点:数量多时,影响服务器性能
2.具体使用方式:
cookie:
通俗讲,是访问某些网站后在本地存储的一些网站相关信息,下次访问时减少一些步骤。更准确的说法是:Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案,以键值对形式保存.
具体实现:
请求头携带Cookie
如python
request.get(url,cookie=cookie)
session:
一般步骤:
1.服务器端的产生Session ID
2.服务器端和客户端存储Session ID
3.从HTTP Header中提取Session ID(发送的是一个COOKIC值)
4.根据Session ID从服务器端的Hash中获取请求者身份信息
- 浏览器第一次访问服务器时会创建一个session对象并返回一个JSESSIONID=ID的值,创建一个Cookie对象key为JSSIONID,value为ID的值,将这个Cookie写回浏览器
- session是基于Cookie技术实现,重启浏览器后再次访问原有的连接依然会创建一个新的session,因为Cookie在关闭浏览器后就会消失,但是原来服务器的Session还在,只有等到了销毁的时间会自动销毁。
具体实现:
信息头中携带(键)Cookie:(值) sessionID
token:
首次携带账户名,服务器返回token,之后每次请求携带
具体实现:
信息头中携带(键)Authorization:(值) bearer +具体信息
Token 取代cookie原因:
token验证是无状态的,即服务端不需要记录token。服务端只需生成token,和验证token有效性,等(详见:https://blog.youkuaiyun.com/tiger0709/article/details/78095216)
如果有误,欢迎反馈指导!!!本文章只为了自己了解各种机制,查资料引用和总结获得。
LocalStorage:本地缓存(不主动清理,则一直存在)SessionStorage:短期本地缓存(关闭浏览器,清除) ↩︎