Session与Cookie

209 阅读3分钟

Session与Cookie

Cookie是什么

Cookie 是一种在客户端存储数据的技术,通常用于在浏览器和服务器之间传递数据。Cookie 最常用于记录用户的登录状态,以及在多个页面之间共享用户的偏好设置等数据。

Cookie 的工作原理是:

  1. 当浏览器发送 HTTP 请求时,服务器可以在响应头部添加一个 Set-Cookie 字段,该字段包含要在客户端存储的数据以及相关的属性(例如过期时间、域名、路径、安全性等)。

  2. 浏览器在接收到响应后,会将 Cookie 数据存储在客户端,并在后续的请求中将该 Cookie 数据发送给服务器端,从而实现数据的传递和共享。

Cookie 的属性包括以下几个:

  • Name:Cookie 的名称,必须唯一。
  • Value:Cookie 的值,可以是任意字符串。
  • Expires/Max-Age:Cookie 的过期时间,可以指定一个具体的日期或者时间间隔。
  • Domain:Cookie 的域名,可以限制 Cookie 的作用域。
  • Path:Cookie 的路径,可以限制 Cookie 的作用范围。
  • Secure:如果设置为 true,则只有在 HTTPS 连接下才会发送 Cookie。
  • HttpOnly:如果设置为 true,则无法通过 JavaScript 访问 Cookie,从而防止 XSS 攻击。

需要注意的是,Cookie 存在一些安全问题,例如 XSS 和 CSRF 攻击。为了保障数据的安全,应尽可能减少存储敏感数据,同时使用 HttpOnly 和 Secure 属性来提高安全性。

Session是什么

Session 是一种在服务器端存储数据的技术,通常用于在服务器和客户端之间共享数据。Session 最常用于记录用户的登录状态和在不同页面之间共享用户数据等。

Session 的工作原理是:

  1. 当用户发送请求到服务器时,服务器会创建一个会话(Session),并为该会话分配一个唯一的 Session ID

  2. 该 Session ID 通常会通过 Cookie 发送给客户端保存,在后续的请求中,客户端会将该 Session ID 发送给服务器,服务器可以根据该 Session ID 查找对应的会话,并获取其中存储的数据。

Session 可以在服务器端存储任意类型的数据,通常是存储在服务器的内存或者硬盘上。不同的服务器端语言(例如 PHP、Java、Python 等)会有不同的实现方式,但基本原理是相似的。

需要注意的是,Session 存在一些安全问题,例如 Session Fixation 和 Session Hijacking 攻击。为了提高安全性,应使用随机的 Session ID,并对 Session 数据进行加密和验证,同时限制 Session 的有效时间,以免 Session 数据被滥用或者盗用。

几种常见的数据存储技术对比

  • Cookie V.S. LocalStorage

    1. 主要区别是 Cookie 会被发送到服务器,而 LocalStorage 不会

    2. Cookie 一般最大 4k,LocalStorage 可以用 5Mb 甚至 10Mb(各浏览器不同)

  • LocalStorage V.S. SessionStorage

    1. LocalStorage 一般不会自动过期(除非用户手动清除)

    2. SessionStorage 在回话结束时过期(如关闭浏览器之后,具体由浏览器自行决定)

  • Cookie V.S. Session

    1. Cookie 存在浏览器的文件里,Session 存在服务器的文件里

    2. Session 是基于 Cookie 实现的,具体做法就是把 SessionID 存在 Cookie 里