Cookie与Session的作用
Cookie
定义:
Cookie是存储在用户浏览器中的小数据片段,通常用于保存用户会话信息、偏好设置等。他们由服务器发送给客户端,并由客户端保存。
作用:
-
保持用户状态:在用户浏览不同页面时维持登录状态或其他个性化设置
-
追踪用户行为:例如记录用户的访问习惯以进行分析或广告推送
-
安全特性:可以何止HttpOnly标志防止通过JavaScript访问(减少XSS攻击风险),以及Secure标志确保仅通过HTTPS传输
限制:
每个域名下的Cookie数量和大小有限制;Cookie在每次请求中都会发送到服务器,可能会增加请求的数据量。
解释:
-
存在哪里?存在本人的浏览器这里
-
有什么用?
-
让网站记住你是谁(比如登录状态)
-
记住你的偏好(比如语言、主题)
-
-
举个例子:
-
登录一个网站之后,下次打开它还记得你是谁,不需要重新登录,这就是Cookie的功劳
-
-
缺点:
-
容量很小(智能存少量的数据)
-
每次访问网页都会带上它,可能影响速度
-
如果不安全设置,容易被黑客读取
-
Session
定义:
Session时一种服务器端技术,用来跟踪用户的状态。当用户访问网站时,服务器为该用户创建一个唯一的session ID,并将此ID存储与cookie中返回给客户端
作用:
-
管理用户会话:主要用于登陆验证、购物车等功能,能够使被来自同一用户的连续请求
-
安全性较高:因为session数据存储在服务器上,不像cookie那样容易被篡改
-
灵活性强:可以存储比cookie更多的信息,且不受浏览器cookie大小的限制
实现方式:
通常使用session ID来关联用户,session数据可以存储在内存、数据或者文件系统中
解释
-
存在哪里?存在服务器那边(不是本人的电脑里)
-
有什么用?
-
网站用来识别你是谁,保存你的登录信息或购物车内容等
-
-
举个例子
-
你在电商网站加购商品,即便没付款,离开页面再回来,购物车还在,这可能是Session在起作用
-
-
特点
-
更安全,因为数据不在本人这里
-
服务器要负责管理所有用户的Session,压力大一点
-
你去一家咖啡店,每次来都会另一个小卡片,上面写的你的名字和你喜欢的咖啡口味
这个小卡片就是cookie
还是这家咖啡店,不一样的是,进店时服务员给你一个会员编号,但不会写在卡片上,而是记在他自己的本子上
这个会员编号就是Session ID,服务员本子上的记录就是Session数据
Token认证机制(如JWT)
JSON Web Token(JWT)
定义:
JWT是一种开放标准(RFC 7519),用于在网络应用环境间安全地将信息作为JSON对象传输。通常用于身份验证和信息交换。
结构:
JWT由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature)。这三部分用点号(.)分隔。
-
Header:描述令牌类型(即JWT)及所使用的签名算法
-
Payload:包含生命(claims),这些是关于实体(通常是用户)和其他数据的声明(比如用户名、角色、过期时间等)
-
Signature:用来验证消息在传输过程中没有被更改,对于使用私钥签名的令牌,还可以验证发送者的身份(验证这个token是不是真的)
xxxxx.yyyyy.zzzzz
工作流程:
-
用户使用用户名/密码登录系统
-
系统验证凭据后生成JWT并返回给客户端
-
客户端收到JWT后将其保存(通常在localStorage或sessionStorage中)
-
后续请求都将携带此JWT到服务器进行身份验证
优点:
-
无状态:不需要在服务器端保存会话信息,易于扩展
-
跨域支持:适合分布式架构或多服务架构
-
安全性:使用HMAC或RSA加密算法保证数据完整性和真实性
注意事项:
-
保护好密钥:如果签名密钥泄露,则任何人都可以伪造令牌
-
有效期控制:设置合理的过期时间来限制token的有效性,避免长期有效的安全隐患
-
存储安全:避免在不安全的地方存储敏感信息,考虑使用HttpOnnly和Secure属性增强安全性
Cookie + Session vs Token(如 JWT)
对比
对比项 | Cookie + Session | Token(如 JWT) |
---|---|---|
存储位置 | 浏览器(Cookie)+ 服务器(Session) | 浏览器(localStorage / sessionStorage) |
是否需要服务器存储 | 是 | 否(无状态) |
是否适合分布式系统 | 不太适合 | 非常适合(跨域、多服务) |
安全性 | 中等(需设置 HttpOnly) | 较高(签名机制) |
扩展性 | 一般(Session 多服务器同步麻烦) | 强(适合微服务架构) |
总结:
-
Cookie 是浏览器帮你保存的小纸条;
-
Session 是服务器帮你记的账本,靠 Cookie 来认人;
-
Token(如 JWT) 是你自己带着的电子身份证,走到哪带到哪,服务器一看就知道你是谁。