cookie, session, token

本文详细解析了HTTP无状态性下,Cookie如何标识用户身份,Session在服务端存储会话信息的机制,以及Token在多服务单点登录中的应用。强调了它们在身份验证和分布式协作中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度了一下发现这方面的知识真的太杂太乱了,只能自己花点时间好好捋一下。

零、序言

http是无状态的,所以要让服务端知道你的身份或者连接之前的会话,就需要发一串东西给服务端,这个东西叫做cookie,存储在http报文的header里。

一、cookie

定义

【百度】Cookie 并不是它的原意“甜饼”的意思, 而是一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性, 因此它可以帮助我们实现记录用户个人信息的功能, 而这一切都不必使用复杂的CGI等程序 [2] 。
举例来说, 一个 Web 站点可能会为每一个访问者产生一个唯一的ID, 然后以 Cookie 文件的形式保存在每个用户的机器上。如果使用浏览器访问 Web, 会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的 Web 站点的信息。在这里的每个 Cookie 文件都是一个简单而又普通的文本文件。透过文件名, 就可以看到是哪个 Web 站点在机器上放置了Cookie(当然站点信息在文件里也有保存) [2] 。

用法

【知乎】cookie一般用于验证客户端身份,应该说没有什么比这个是更要注意的事情了。如果服务端将一个客户端的身份搞错了,后果可想而知。但是由于http是无状的协议,所以每次请求客户端必须告知他是谁,大多情况下是通过协带cookie的方式来作身份验证。服务端一般在用户登录请求验证成功后,查询客户端用户信息,生成一个全局唯一的key,将key与用户信息绑定写入redis(或其他持久化存储)。之后向客户端写入两条cookie,一是key(或对称加密后的),一条是非对称加密的sign信息。Set-Cookie key=961c4959630d0b0f;
Set-Cookie sign=4335769f5d0877bb;只有key与sign两条cookie匹配的情况下,服务端才认为这个用户是合法用户。然后根据key去redis中查询用户信息,才能确定这个用户到底是谁。反之,如果将用户信息直接写入客户端cookie。Set-Cookie userid=123456;下次用户带上的userid,服务端也不敢直接用啊。

总结

客户端存储登录信息
服务端存储合法未过期的cookie id

二、session

客户端第一次访问服务端之后,服务端在数据库中保存信息,将session的id放入cookie中传回;下次客户端访问时,需要将session的id放入cookie传给服务端。和cookie的不同在于,信息的存储是全部在服务端的数据库或者缓存里的。

总结

客户端存储session id;
服务端存储session的全部信息;
如果多服务端的话,需要同步session信息或者在redis集群中存储session信息,对服务端压力过大。

三、token

我之前写过了,就不重复了
https://blog.youkuaiyun.com/HDUCheater/article/details/119141978

总结

客户端存储token

服务端不存储
能满足多服务端的单点登录需求,只需要都使用一套加密解密规则即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值