session 和 cookie 简介

ession 和 cookie 简介

1. session 和 cookie

HTTP协议是一种无状态协议,即服务器端每次接收到客户端的请求都是一个全新的请求,服务器端并不知道客户端的历史请求记录。 session 和 cookie 的主要目的就是为了弥补HTTP的无状态特性

1)session 是什么

客户端请求服务器端,服务器端会为这次请求开辟一块内存空间,这个对象便是 session 对象,存储结构为ConcurrentHashMap

session 弥补了HTTP的无状态特性,服务器端可以利用 session 存储客户端在同一个会话期间的一些操作记录

2)session 是如何判断是否为同一个对话

服务器端在第一次接收到请求时,会开辟一块 session 空间(创建了 session 对象),同时生成一个 sessionld,并通过响应头的 Set-Cookie: JSESSIONID=XXXXXX 命令,向客户端发送要求设置 cookie 的响应。

客户端在收到响应后,在本机客户端设置了一个“JSESSIONID=XXXXXXX”的 cookie 信息,该cookie的过期时间为浏览器会话结束。

session 和 cookie

接下来,在客户端每次向同一个服务器端发送请求时,请求头中都会有该 cookie 信息(包含sessionld)服务器端通过读取请求头中的 cookie 信息,获取名称为 JSESSIONID 的值,得到此次请求的 sessionld。

3)session 的缺点

session机制有一个缺点:如果A服务器存储了 session (即做了负载均衡),假如一段时间内A的访问量激增,则访问会被转发到B服务器,但是B服务器并没有存储A服务器的 session, 从而导致 session 失效。

4)cookie 是什么

HTTP 协议中的 cookie 是服务器端发送到客户端Web浏览器的一小块数据,包括 Web cookie 和浏览器 cookie。服务器端发送到客户端浏览器的 cookie,浏览器会进行存储,并与下一个请求 一起发送到服务器端。通常,它用于判断两个请求是否来自同一个客户端浏览器,例如用户保持登录状态。

cookie主要用于以下3个方面:

  1. 会话管理:在登录、购物车、游戏得分或者服务器里常需要用会话管理来记住其内容。
  2. 实现个性化:个性化是指用户偏好、主题或者其他设置。
  3. 追踪:记录和分析用户行为

cookie 曾经用作一般的客户端存储,那时这是合法的,因为它们是在客户端上存储数据的唯一 方法。但如今建议使用现代存储 APl。 cookie 随每个请求一起被发送,因此它们可能会降低性能(尤其是对于移动数据连接而言)。

5)session 和 cookie 的区别

  1. 首先,无论客户端浏览器做怎么样的设置, session 都应该能正常工作。客户端可以选择禁用 cookie,但 session 仍然是能够工作的,因为客户端无法禁用服务器端的 session
  2. 其次,在存储的数据量方面,session 和 cookie 也是不一样的。 session能够存储任意类型的对象cookie只能存储 String 类型的对象

2. 创建 cookie

当接收到客户端发出的HTTP请求时,服务器端可以发送带有响应的 Set-Cookie 标头。cookie 通常由浏览器存储,浏览器将 cookie 与HTTP标头组合在一起向服务器端发送请求。

1)Set-Cookie 标头和 cookie

Set-Cookie 响应标头的作用是将 cookie 从服务器端发送到用户代理。

2)会话 cookie

会话 cookie 有一个特征——客户端关闭时 cookie 会被删除,因为它没有指定 Expires或 Max-Age 指令。但是,Web浏览器可能会使用会话还原,这会使得大多数会话 cookie 保持“永久”状态,就像从未关闭过浏览器。

3)永久性 cookie

永久性 cookie 不会在客户端关闭时过期,而是在到达特定日期(Expires)或特定时间长度 (Max-ge)后过期。例如“Set-Cookie:id=b8gnc; Expires=Sun,21 Dec 2020 07:28:00 GMT;”表示设置一个 id 为 b8gNc、过期时间为2020年12月21日07:28:00、格林尼治时间的 cookie。

3. cookie 的作用域

DomainPath 标识定义了 cookie的作用域,即 cookie应该被发送给哪些RL。 Domain 标识指定了哪些主机可以接受 cookie。如果不指定 Domain,则默认为当前主机(不包含子域名); 如果指定了 Domain,则一般包含子域名。例如,如果设置 Domain = baidu.com,则 cookie也包含在子域名中(如news.baidu.com/)。

例如,设置Path=/test,则以下地址都会匹配:

  • /test
  • /test/news/
  • /test/news/id

猜你喜欢

转载自blog.csdn.net/qq_45668004/article/details/118049935
今日推荐