Cookie 用于在客户端存储 session ID,而 Session 用于在服务器端存储用户状态和信息。
- Cookie:
- Cookie 是由服务器发送到用户浏览器的小块数据。浏览器会将这些数据存储起来,并在随后的请求中自动发送回服务器。
- Cookie 可以用于存储用户的偏好设置、会话标识符(session IDs)等信息。
- Cookie 存储在用户的本地计算机上,由浏览器管理。
- Cookie 有大小限制(通常为4KB),并且数量也有限。
- Cookie 可以设置过期时间,过期后会自动删除。
- Session:
- Session 是一种服务器端存储技术,用于跟踪用户的状态。每个用户都会有一个唯一的 session,存储在服务器上。
- Session 可以存储比 Cookie 更多的数据,并且没有大小限制。
- Session 通常用于存储用户的登录状态、购物车内容等需要跨多个页面保持状态的信息。
- Session 需要一个唯一的标识符(session ID)来识别不同的用户会话,这个标识符可以存储在 Cookie 中,也可以通过 URL 参数或其他方式传递。
Cookie与Session
-
Session ID 存储:当用户第一次访问网站时,服务器会创建一个新的 session,并生成一个唯一的 session ID。这个 ID 通常会存储在用户的 Cookie 中,以便浏览器在后续的请求中自动发送回服务器。即:
1
cookie的value是session的文件名session_id,session_id名由服务端随机而来,session_id文件中存储的数据是session的name和value。
-
无状态的 HTTP:HTTP 协议本身是无状态的,这意味着服务器无法识别两个请求是否来自同一个用户。Session 和 Cookie 的结合使用就是为了解决这个问题,通过 session ID 来维持用户的会话状态。
-
安全性:
-
cookie: 由于 Cookie 存储在客户端,存在被篡改的风险。可以设置cookie的key 、val 、 失效时间 、域、 path;对于未设置失效时间的cookie则认为是会话cookie,它的生命周期与浏览器是同步的,浏览器关闭之后cookie便会被删除。最好,将敏感信息(如用户身份验证信息)不直接存储在 Cookie 中,而是存储在服务器端的 session 中。Cookie 只存储 session ID,用于访问服务器上的 session 数据。
-
Session: session数据可以保存在数据库、文件或者redis中;高并发情况下会产生大量的session数据,对于存储在服务器文件而言,可能会造成服务器资源的消耗紧张;
常常采用的是将session数据存储在一个单独的服务中,例如公司的passport服务。
-
-
无 Cookie 的 Session:即使用户的浏览器禁用了 Cookie,也可以通过 URL 重写或 HTML 表单隐藏字段等方式传递 session ID,从而实现基于 Session 的会话管理。
总的来说,Cookie 和 Session 是互补的。
session共享:通过将session文件存入缓存能达到session共享的目的,即多人共用一个账号登录,信息同步