Java面试题:session和cookie的关系

本文将介绍 session 和 cookie 之间的关系,了解后有助于我们正确的使用 session 和 cookie

在介绍 session 和 cookie 的关系之前,我们需要先了解如下几个概念:

无状态的HTTP协议

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从 Web 服务器传送到客户端的浏览器。

HTTP 协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。

那么问题来了,既然客户端每次交换数据后会断开连接,服务器怎样跟踪客户端呢?这就是 cookie 和 session 需要做的工作。

会话(Session)跟踪

会话指用户登录网站后的一系列动作,比如:浏览商品、添加到购物车、下单、购买商品。

会话跟踪是 Web 程序中常用的技术,用来跟踪用户的整个会话,常用的会话跟踪技术是 Cookie 与 Session。

Cookie 通过在客户端记录信息确定用户身份,Session 通过在服务器端记录信息确定用户身份。

Cookie 和 Session 的关系

共同之处

Cookie 和 Session 都是用来跟踪浏览器用户身份的会话方式。

工作原理

Cookie的工作原理

  • 浏览器第一次发送请求从服务器获取资源

  • 服务器端创建 Cookie,该 Cookie 中包含用户的信息,然后将该 Cookie 发送给浏览器

  • 浏览器再次访问服务器时会携带服务器端创建的 Cookie,如:SESSIONID

  • 服务器通过 Cookie 中携带的数据(SESSIONID)区分不同的用户

Session的工作原理

  • 浏览器第一次发送请求到服务器,服务器会创建一个 Session,同时会创建一个特殊的 Cookie,该 Cookie 中必须包含名为 JSESSIONID 的项,该项的值为 Session 对象的 ID,然后将该 Cookie 发送至浏览器

  • 浏览器接下来发送其他请求到服务器,这些请求将会携带名为 JSESSIONID 的 Cookie 对象到服务器

  • 服务器将根据名为 JSESSIONID 的 Cookie 的值(即 SESSIONID)去查询 Session 对象,从而区分不同用户

    • 如果名为 JSESSIONID 的 Cookie 不存在,将重新去创建 Session 与特殊的 Cookie

    • 如果名为 JSESSIONID 的 Cookie 存在,根据它的值去查找 Session 对象,如果存在 Session 对象,则根据对象信息区分用户。如果不存在 Session 对象,则重新去创建 Session 与特殊的 Cookie

尺有所短;寸有所长。物有所不足;智有所不明。——屈原《卜居》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号