Cookie
Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器。
作用:
会话管理: 记录用户的登录状态、购物车内容等。
个性化: 存储用户的偏好设置,如语言、主题等。
追踪: 用于分析用户行为,进行广告投放等。
特点:
存储在客户端: Cookie 存储在用户的浏览器中。
大小限制: 通常每个 Cookie 的大小限制为 4KB。
生命周期: 可以设置 Cookie 的过期时间,可以是会话级别的(关闭浏览器后失效)或持久性的(指定过期时间)。
安全性: 可以通过设置 HttpOnly 和 Secure 属性来提高安全性,防止 XSS 和中间人攻击。
创建和使用:
服务器通过 HTTP 响应头 Set-Cookie 来创建 Cookie。
浏览器在后续请求中通过 Cookie 请求头将 Cookie 发送回服务器。
示例:
Set-Cookie: sessionId=abc123; Expires=Wed, 09 Jun 2024 10:18:14 GMT; Secure; HttpOnly
2. Session
定义:
Session 是一种服务器端的状态管理机制,用于在多个请求之间保持用户状态。
作用:
会话管理: 存储用户的登录状态、购物车内容等。
数据存储: 存储用户相关的临时数据,如表单数据、用户偏好等。
特点:
存储在服务器端: Session 数据存储在服务器上,通常存储在内存、数据库或文件系统中。
会话标识: 通常使用一个唯一的会话 ID(Session ID)来标识用户会话,这个 ID 通常通过 Cookie 传递给客户端。
生命周期: 会话通常在用户关闭浏览器或服务器端设置的超时时间后失效。
创建和使用:
服务器在用户首次访问时创建一个会话,并生成一个唯一的会话 ID。
服务器将这个会话 ID 通过 Cookie 发送给客户端。
客户端在后续请求中通过 Cookie 携带会话 ID,服务器根据会话 ID 查找对应的会话数据。
示例:
服务器创建会话并设置会话 ID:
Set-Cookie: sessionId=abc123; HttpOnly
客户端请求时携带会话 ID:
Cookie: sessionId=abc123
3. Cookie 和 Session 的关系
依赖关系: Session 通常依赖于 Cookie 来传递会话 ID。
安全性: Session 比 Cookie 更安全,因为敏感数据存储在服务器端,而不是客户端。