小蔡学Java

Cookie和Session的关系

2023-11-07 19:36 1471 1 JavaWeb JavaWeb

Cookie和Session的关系

Cookie 和 Session 是在 web 开发中用于维护用户状态的两个关键概念。

Cookie:

  • 定义: Cookie 是在客户端(通常是浏览器)存储的小型文本文件,由服务器发送到客户端并存储在用户的计算机上。
  • 作用: Cookie 主要用于在客户端保持用户的一些信息,如用户首选项、登录状态等。
  • 特点: Cookie 以键值对的形式存在,可以通过浏览器的 Cookie 存储来存储和检索信息。

Session:

  • 定义: Session 是服务器端的一种机制,用于在服务器上存储用户的信息,以维护用户的状态。
  • 作用: Session 通常用于存储和跟踪用户在网站上的会话信息,如登录状态、购物车内容等。
  • 特点: 每个用户都有一个唯一的会话标识符(Session ID),该标识符通常存储在 Cookie 中,但也可以通过 URL 参数传递。服务器使用这个标识符来检索用户的会话信息。

关系:

  • Cookie 存储 Session ID: 通常,Session ID 被存储在 Cookie 中。当用户首次访问网站时,服务器会生成一个唯一的 Session ID,并将它存储在一个名为 "sessionid" 或类似的 Cookie 中,然后将该 Cookie 发送给客户端。
  • Session 数据存储在服务器: 用户的实际会话数据(如登录状态、购物车内容)存储在服务器上,而不是存储在 Cookie 中。服务器使用 Cookie 中的 Session ID 来映射到相应的会话数据。

工作流程简述:

  1. 用户首次访问网站,服务器创建一个唯一的 Session ID,并将它存储在 Cookie 中。
  2. 服务器创建一个与该 Session ID 相关联的会话,并在服务器端存储用户的状态信息。
  3. 用户的浏览器随后的每次请求都会携带这个 Session ID(存储在 Cookie 中),服务器据此来检索用户的会话信息,以维护用户的状态。
  • 总的来说,Cookie 和 Session 是为了在 web 应用中保持用户状态而设计的,它们相互协作,Cookie 用于在客户端存储 Session ID,而 Session 数据则存储在服务器上。

举例 - 商店购物

当我们访问一个网站时,可以把这个过程类比为进入一家商店。在这个例子中:

定义:

  • Cookie 就像是你手上的购物篮:

       当你第一次进入商店时,店员给了你一个购物篮,上面写有一个独一无二的编号。这个购物篮就是 Cookie,它存放在你手上,代表着你在这家商店的“身份”。
    
  • Session 就像是商店后台的购物篮架:

       商店后台有一个大的购物篮架,上面标有各种编号,每个编号对应着一个顾客的购物篮。这个购物篮架就是 Session,它在商店的后台,用于存储所有顾客的购物篮(状态信息)。
    
  • 购物篮编号(ID):

       购物篮上的编号就像是 Session ID,它是唯一的,能够将你的购物篮与后台的购物篮架上的对应起来。每个购物篮都有一个独立的编号,存储在不同的 Cookie 中。
    
  • 购物篮上的有效期标签(Session 的时效性机制):

       在每个购物篮上贴着一个有效期标签,表示这个购物篮的有效时间。比如,标签上写着“24小时”。
       这个有效期标签就是 Session 的时效性机制,它规定了这个购物篮(Session)在多长时间内有效。
    

Session(购物篮)相关活动:

  • 购物篮生成(Session 创建):

商店(服务器)在用户第一次进入时为其生成一个独特的购物篮(Session ID)。 购物篮上可能有一个有效期标签,表示购物篮在一定时间内有效。

  • 购物篮分发(Cookie 发送):
  1. 商店将购物篮交给用户,并在用户手中放置一个编号(Cookie)以便下次进入商店时能够识别。
  2. 用户在商店中活动,将购物篮携带在手上,实现状态的维护。
  • 购物篮回收(Session 过期或删除):
  1. 购物篮可能有一个有效期,一旦过期,商店可能会要求用户重新领取一个新的购物篮(Session 创建)。
  2. 用户关闭浏览器时,购物篮可能会被销毁(Session 过期或删除),商店会清理过期的购物篮。
  • 购物篮更新(Session 刷新):

用户在商店活动时,购物篮上的有效期标签可能会不断更新,确保用户在活动期间购物篮保持有效。

操作流程:

  1. 你进入商店时,得到一个购物篮(Cookie),上面有编号(Session ID)和有效期标签(Session 的时效性机制)。
  2. 每次你在商店里选购商品(在网站上进行活动),都往购物篮里放入了一些商品,这些商品就代表着你的活动和状态信息。
  3. 每当你进行操作时,有效期标签上的时间都会被刷新,相当于购物篮的有效时间被延长。
  4. 如果你在有效期内持续活动,购物篮(Session)会一直保持有效。
  5. 当有效期到达后(比如24小时后),即使你手上还有购物篮(Cookie),但商店可能会要求你重新领取一个新的购物篮,以确保安全性和及时更新用户状态。
  6. 当你结账时(进行某些操作),你手上的购物篮(Cookie)上的编号(Session ID)告诉店员(服务器),店员从后台购物篮架(Session)里拿出对应编号的购物篮,查看你选购的商品(活动和状态信息)。

这样,Cookie 和 Session 通过编号的方式,使得在整个购物(网站访问)过程中能够保持状态,让服务器能够根据编号找到相应的用户数据。

原文链接:

  • https://blog.csdn.net/crazy_xieyi/article/details/127096862

  • https://www.cnblogs.com/awzy/p/17988812#tid-xnhBQX

评论( 1 )

  • 极光之夏 2024-09-08 09:04 回复

    很不错,总结很到位,加油!

  • 博主 Mr Cai
  • 坐标 河南 信阳
  • 标签 Java、SpringBoot、消息中间件、Web、Code爱好者

文章目录