Cookie和Session

发布时间 2023-10-03 09:38:22作者: 小强不砍树

1. 前言

Cookie和Session是Web开发中常用的概念,用于在客户端和服务器之间存储和跟踪用户信息。

2. Cookie

2.1 什么是Cookie

Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如Microsoft Edge、Firefox、Google Chrome等都支持Cookie。Cookie是一种在Web浏览器中存储的小型文本文件,用于在客户端和服务器之间传递数据和跟踪用户信息。当您首次访问一个网站时,服务器会将一个特殊的标识符(称为cookie)发送到您的浏览器,然后浏览器将这个cookie保存在本地。

2.2 Cookie实现的功能

  • 跟踪和记忆用户的偏好设置、登录状态和其他个性化信息。
  • 记录用户的浏览习惯,以便网站提供更相关和定制的内容。
  • 支持购物车功能,存储商品信息和购买选项。
  • 进行广告定向投放,根据用户的浏览行为提供相关的广告。

2.3 Cookie的工作原理

  • 客户端请求:当用户在浏览器中发起一个请求访问一个网站时,浏览器会将该请求发送给服务器。

  • 服务器响应:服务器接收到客户端的请求后,会生成一个或多个包含要发送给浏览器的Cookie的HTTP响应。

  • Cookie发送:服务器将生成的Cookie通过HTTP响应的头部信息(Set-Cookie)发送给浏览器。Cookie通常包含了名称、值、域名、路径、过期时间等属性。

  • Cookie存储:浏览器接收到服务器发送的Cookie后,会将其保存在本地的Cookie存储中,按照域名和路径进行分类存储。

  • 后续请求:随后,当用户浏览器再次访问同一网站时,浏览器会将该网站相关的Cookie信息通过HTTP请求头部(Cookie字段)发送给服务器。

  • 服务器识别:服务器接收到包含Cookie的请求后,会解析Cookie,并根据其中的信息进行认证、跟踪用户状态等操作。服务器可以通过读取Cookie中的值来获取用户的个性化设置、登录状态等信息。

注意:对于每个网站,浏览器可以存储多个相关的Cookie,并根据域名和路径来区分。 Cookie可以设置过期时间,如果没有设置过期时间,Cookie会默认被视为会话性Cookie,即在浏览器关闭后会被删除。此外,Cookie存储在浏览器中,因此可以被其他网站访问和读取。为了保护用户的隐私和安全,网站通常会采取一些安全措施,如使用加密、签名和限制Cookie的作用域等。

3. Session

3.1 什么是Session

Session是服务器端的概念,它在服务器内存或数据库中存储一些用户信息。当用户首次访问网站时,服务器会生成一个唯一的session ID并将其存储在Cookie中发送给浏览器,同时在服务器端创建一个对应的session对象。随后,浏览器每次请求都会携带session ID,服务器通过该ID来找到对应的session对象,从而获取或更新用户信息。session相对于cookie更安全,因为用户无法修改其内容。

3.2 为什么要用Session

由于cookie 是存在用户端,而且它本身存储的尺寸大小也有限,最关键是用户可以是可见的,并可以随意的修改,很不安全。那如何又要安全,又可以方便的全局读取信息呢?于是,这个时候,一种新的存储会话机制:session 诞生了

3.3 Session的工作原理

  • 会话的创建:当用户首次访问一个网站时,服务器会为该用户创建一个唯一的会话,并为其分配一个唯一的会话ID。

  • 会话ID的传递:服务器将会话ID发送给客户端,可以通过Cookie的方式在HTTP响应中设置一个名为"session_id"的Cookie,也可以使用URL重写等方式在每个请求中传递会话ID。

  • 会话数据存储:服务器在内存或数据库等存储介质中存储与会话ID相关的数据,如用户的登录状态、购物车内容等。

  • 会话数据访问:随后,当用户再次发送请求给服务器时,会携带上一步中获取到的会话ID。服务器通过会话ID找到对应的会话数据,并进行处理和响应。

  • 会话的更新:在用户的每次请求中,服务器可以根据需要更新会话数据。例如,用户添加商品到购物车,服务器会更新购物车内容的数据。

  • 会话的销毁:会话可以有一定的生命周期,超过指定时间或用户主动注销时,服务器会销毁该会话及其相关数据。

注意:会话数据存储在服务器端,因此对服务器的负载和存储需求会有一定的影响。服务器通常会根据一定的策略管理会话的生命周期,包括设置会话超时时间、数据清理等,以平衡资源的使用和安全性的考虑。

4. 区别

  • 存储位置不同:Cookie存储在客户端浏览器中,而Session存储在服务器端。

  • 安全性不同:Cookie可以被客户端进行修改或删除,存在一定的安全隐患;而Session存在于服务器的内存中,对于客户端是不可见的,因此比Cookie更加安全。

  • 存储容量不同:Cookie存储容量比较小,通常只能存储几KB的数据,而Session存储容量相对较大,可以存储数MB的数据。

5. 联系

  • 都是用于存储和维护用户状态的技术。

  • 可以解决HTTP协议的无状态问题,保持用户在一段时间内的登录状态。

  • 在实际应用中经常会同时使用Cookie和Session,通过Cookie维护Session的标识符,实现用户状态的保存和管理。

6. 总结

Cookie是由服务器发送给浏览器存储的数据,而Session是服务器端存储用户信息的一种机制。它们都可以用于跟踪用户状态和记住用户信息,但安全性和存储位置不同。Session比Cookie相比较Session更加安全一点。但Restful架构中提到,服务端不能用来保存用户的状态,故一般用Cookie来保存一些信息。