Cookie、Session和Token之间的区别
Cookie、Session和Token之间的区别
Cookie
由服务器生成并且由浏览器保存的一小段数据
主要用于保持用户登录状态,存储用户偏好。
举例:
你登录了某网站,服务端给你一个 cookie: userId=123
,以后浏览器访问该网站时都会带上这个 cookie(数据信息明文存储,不安全,容易被窃取)。
Session
存储在服务器端的用户会话数据,服务器生成一个SessionID,通过Cookie或URL传给客户端,客户端在下次请求时带上SessionID
举例:
用户登录后,服务端保存 Session[ID=abc123] = {userId=123, role=admin}
,浏览器只要带上 abc123
就能取到会话信息。
Token
一种认证凭证(加密字符串,常见如JWT),认证成功后服务端给客户端一个Token,Token保存在客户端,客户端每次请求都要携带Token
举例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJ1c2VySWQiOiIxMjMiLCJleHAiOjE3MDAwMDAwMDB9
.Vs5j1gQj-xyz
里面包含了用户 ID 和过期时间,服务端只需要解密/验签就知道用户是谁。
特征:
Cookie:像一张“饭卡”,你拿着卡号给食堂。
Session:食堂记账本,服务员拿卡号去账本里查你的余额。
Token:你带着“签过名的纸条”,上面写着你是谁和余额多少,食堂只要验证签名,就知道你是不是合法的。
Token最大的优点是无状态(服务端不保存用户会话数据,数据本身就在Token中)
Session 模式:网吧老板(服务器)拿小本子记录你的身份证号、时间、座位号,下次你来报身份证号,他查小本子。
Token 模式:老板直接给你一张带签名的纸条(Token),写着你的身份证号、时间、座位号,你下次来只要把纸条给他,他看一眼签名对不对就行,不用查小本子。