在介绍 session 和 cookie 的关系之前,我们需要先了解如下几个概念:
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从 Web 服务器传送到客户端的浏览器。
HTTP 协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。
那么问题来了,既然客户端每次交换数据后会断开连接,服务器怎样跟踪客户端呢?这就是 cookie 和 session 需要做的工作。
会话指用户登录网站后的一系列动作,比如:浏览商品、添加到购物车、下单、购买商品。
会话跟踪是 Web 程序中常用的技术,用来跟踪用户的整个会话,常用的会话跟踪技术是 Cookie 与 Session。
Cookie 通过在客户端记录信息确定用户身份,Session 通过在服务器端记录信息确定用户身份。
Cookie 和 Session 都是用来跟踪浏览器用户身份的会话方式。
浏览器第一次发送请求从服务器获取资源
服务器端创建 Cookie,该 Cookie 中包含用户的信息,然后将该 Cookie 发送给浏览器
浏览器再次访问服务器时会携带服务器端创建的 Cookie,如:SESSIONID
服务器通过 Cookie 中携带的数据(SESSIONID)区分不同的用户
浏览器第一次发送请求到服务器,服务器会创建一个 Session,同时会创建一个特殊的 Cookie,该 Cookie 中必须包含名为 JSESSIONID 的项,该项的值为 Session 对象的 ID,然后将该 Cookie 发送至浏览器
浏览器接下来发送其他请求到服务器,这些请求将会携带名为 JSESSIONID 的 Cookie 对象到服务器
服务器将根据名为 JSESSIONID 的 Cookie 的值(即 SESSIONID)去查询 Session 对象,从而区分不同用户
如果名为 JSESSIONID 的 Cookie 不存在,将重新去创建 Session 与特殊的 Cookie
如果名为 JSESSIONID 的 Cookie 存在,根据它的值去查找 Session 对象,如果存在 Session 对象,则根据对象信息区分用户。如果不存在 Session 对象,则重新去创建 Session 与特殊的 Cookie