最近在电商项目中写到认证服务,用到了session来保存用户信息。对于cookie和session以及他们的作用之前一直很混淆,通过本篇文文章深入了解。
Cookie是服务器发送到用户浏览器并保存在用户设备上的小型文本文件。它包含有关用户的信息,以便在用户访问同一网站时进行识别和跟踪。Cookie通常由服务器生成,然后通过HTTP协议发送到浏览器。
1.创建和发送: 服务器通过HTTP响应头将Cookie发送到浏览器,浏览器收到后将其存储在本地。
2.存储位置: 存储位置可以是用户计算机上的文件,也可以是浏览器内部的数据库。
3.发送: 每次用户请求与该网站相关的资源时,浏览器都会自动将相应的Cookie通过HTTP请求头发送给服务器。
有限期限: Cookie可以设置过期时间,超过该时间后将失效。
大小限制: 每个Cookie的大小通常有限制,通常在4KB左右。
跨域限制: Cookie有同源策略,不能被其他域的页面访问。
Session是在服务器端存储的一种数据结构,用于跟踪用户的状态。与Cookie不同,Session数据存储在服务器上,而客户端的Cookie仅包含用于标识Session的会话标识符。
会话标识符: 当用户首次访问服务器时,服务器会为其分配一个唯一的会话标识符,通常存储在Cookie中。
服务器端存储: 用户的状态信息存储在服务器上,而不是在用户的设备上。
会话管理: 服务器通过会话标识符来管理用户的状态,以确保用户在整个会话期间保持登录状态。
安全性: 与Cookie相比,Session更安全,因为用户无法直接访问或修改服务器上的Session数据。
无大小限制: 服务器上的存储空间相对较大,因此可以存储更多的信息。
不受同源策略限制: Session数据存储在服务器上,不受同源策略的影响。
假设用户首次访问一个网站,该网站使用Cookie来识别用户并保持用户的登录状态。在用户成功登录后,服务器会生成一个包含用户身份信息的Cookie,并通过HTTP响应头将该Cookie发送给用户的浏览器。下面是一个简单的例子:
用户在浏览器中输入网站的地址,访问登录页面(例如,https://www.example.com/login)。
用户输入用户名和密码,并点击登录按钮。
服务器接收到登录请求,验证用户的身份。
如果用户的身份验证成功,服务器会生成一个包含用户标识信息的Cookie,并在HTTP响应头中添加Set-Cookie字段,将Cookie发送给用户的浏览器。
例如,HTTP响应头可能包含类似如下的内容:
HTTP/1.1 200 OK
Set-Cookie: user_id=123; expires=Wed, 17 Jan 2025 12:00:00 GMT; path=/
Content-Type: text/html
Content-Length: 100
<!-- 页面内容 -->
上述例子中,user_id=123是一个简化的表示用户身份的Cookie,它设置了过期时间为Wed, 17 Jan 2025 12:00:00 GMT,以及路径为/表示整个网站都可以访问这个Cookie。
GET /some-resource HTTP/1.1
Host: www.example.com
Cookie: user_id=123
<!-- 其他请求头 -->
通过这个过程,网站能够保持用户的登录状态,而无需用户在每次请求时重新进行身份验证。这是一种常见的使用Cookie的场景,用于实现用户认证和会话管理。