Cookie与Session的关系

67 阅读3分钟

为什么要用SessionCookie

简单一句话,因为Session和Cookie可以记录用户状态信息。

Cookie是什么?

  • Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息。

Seesion是什么

  • Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制。它是在服务端保存的用来跟踪用户的状态的数据结构,可以保存在文件、数据库或者集群中。

先看个百度发送Cookie的小例子

  1. 首先先清空www.baidu.com的所有cookie信息,重新请求
  2. 重新请求百度页面,看看它的请求信息(Request Headers)

企业微信截图_1686282071398.png

  • 可以看到,在请求头里面并没有任何的Cookie信息
  1. 再看看这个请求的响应信息(Response Headers)吧

企业微信截图_16862822552030.png

  • 可以看到响应头里有一堆的Set-Cookie(设置的cookie内容不用关心)
  1. 继续看看下面的同样是www.baidu.com域名下的其他请求的请求头吧

企业微信截图_1686282635563.png

  • 这是百度域名下的一张图片,可以看到它的请求头里面居然有Cookie信息,
  • 其他的www.baidu.com域名和子域名下的请求都带有Cookie信息

问题:那么为什么第一次发送的请求头里面没有Cookie,后面发送的请求都有Cookie呢???

  • 看下面的图片理解

cookie.png

  1. 客户端: 进入一个网站,先进行登录 => 输入用户名密码登录
  2. 服务端: 验证用户名密码,登录成功。例如:生成一个随机数,和用户ID一起存储下来 => { uid: 随机数 } 这种格式,然后把这个随机数在response headers里面通过Set-Cookie存储下来
  3. 客户端: 请求别的信息,请求头会带上刚刚存储的Cookie
  4. 服务端: 接收到请求,请求头有Cookie => 去存储下来的数据 { uid: 随机数里面找 }, 找到对应的uid,嗷嗷原来你是某某用户啊,返回他请求对应的信息
  • Cookie: 就是服务端下发给客户端的登录凭证或者验证信息,存储在客户端上,客户端每次请求这个域名或者它的子域名时都会在请求头里带上这个Cookie

  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

  • Session: 它就是存储在服务端上的Cookie的对应信息: 就是上面那个 { uid: 随机数 } 这个对象,它就是Seesion。存储在内存或者硬盘上

生动形象理解Cookie和Session的关系

 1. Session是保存在服务器端,Cookie是保存在客户端。

 2. 每次用户访问网站的时候,相当于去串门。

 3. 用户带着cookie去服务器家,当当当敲门。

 4. 服务器问是谁啊?

 5. 用户:是我(cookie)啊!

 6. 服务器:让我来确认一下(session确认)。

 7. 服务器确认完毕后,放用户进门。