Cookie和Session的区别
Cookie 和 Session 都是用于存储用户状态和数据的技术,但它们在工作原理、存储位置、安全性等方面有显著区别。
Cookie
存储位置:Cookie 存储在客户端(用户的浏览器)中。
存储大小:每个 Cookie 的大小限制在约 4KB。
生命周期:Cookie 可以设置过期时间(例如,几分钟、几小时或几年)。在过期时间之前,Cookie 会一直保存在客户端,除非被用户手动删除。
安全性:Cookie 可以很容易被用户查看和修改,因此存储在 Cookie 中的数据应该避免包含敏感信息。
支持 HTTPS 安全传输,通过设置 Secure 标志和 HttpOnly 标志可以提高安全性。
应用场景:适用于需要在客户端持久化存储少量数据的场景,比如记住用户的登录状态、用户偏好设置、跟踪用户行为等。用于跨会话存储信息,因为 Cookie 可以设置较长的过期时间。
Session
存储位置:Session 数据存储在服务器端。客户端只保存一个唯一的 Session ID,这个 ID 存储在 Cookie 中(或 URL 中,但不推荐)。
存储大小:服务器端存储的大小只受服务器存储能力的限制,相对于 Cookie,可以存储更多的数据。
生命周期:Session生命周期通常较短,一般与用户的浏览器会话一致。当用户关闭浏览器或会话超时(没有活动一定时间),Session会失效。
安全性:Session 数据存储在服务器端,用户无法直接访问,因此安全性更高。Session ID 可以通过 HTTPS 安全传输,防止被窃取。
应用场景:适用于需要存储敏感信息和较大量数据的场景,如用户的登录信息、购物车、用户偏好等。适用于需要高安全性的场景,因为数据存储在服务器端,避免了客户端的安全风险。
Cookie和Session在登陆场景中的使用
cookie和ssession虽然有一定的区别,但是实际场景中,cookie和session经常搭配使用。下图来源于极客时间专栏,下图是登陆场景中cookie和session搭配使用情况。在登陆场景中,调用login的接口,在数据库中存入用户登陆状态,并通过Set-Cookie把sessionID传递到客户端,客户端在cookie中存储了sessionId信息,后续用户在访问其他请求的时候,通过解析session,就可以知道用户当前的登陆状态。总结而言,两者虽然有区别,但又经常配合一起使用。
以下图为例,这里是访问极客时间网站,可以看到在这个请求中通过Set-Cookie,将ServerID设置到了cookie中。在后续的请求中,Request中cookie的值里面,就包含了ServerID这个键值对。