目录
一、定义
1、Cookie定义
2、Session
二、Cookie和Session的联系和区别
1、联系
2、区别
一、定义
1、Cookie定义
Cookie是浏览器在本地存储数据的一种机制,来自于服务器。
服务器在响应中会带有Set-Cookie字段,通过这个字段就可以把要保存在浏览器的数据返还回去。当浏览器访问服务器时,就会把当前本地的所有Cookie都通过HTTP请求给带过去。
基于这个特性Cookie常用来保存当前用户的登陆状态。
Cookie是服务器写入客户端的文件,也可以称为浏览器缓存。图中的令牌通常用来存储用户的信息并存储在 Cookie 字段中,但Cookie不安全容易伪造。
2、Session
服务器同一时刻收到的请求是很多的,因此服务器需要清楚的区分每个请求是从属于哪个用户,进而就需要在服务器这边记录每个用户令牌以及用户的信息的对应关系。
在Cookie保存用户身份标识的应用场景中,身份标识如何分配、身份信息如何分配以及身份具体如何存储都需要服务器的支持。而Session就是服务器用来实现用户身份区分的一种机制,通常是和Cookie配合使用的。
- 当用户登陆时,服务器在Session中新增一个新记录,并把sessionId/token返回给客户端
- 客户端给服务器发送请求时,需要在请求中带上sessionId/ token
- 服务器收到请求之后,根据请求中的sessionId/token在Session信息中获取到对应的用户信息,再进行后续操作
会话的本质是一个“哈希表”,存储了一些键值对结构。key是令牌的ID(token/sessionId),value是用户信息。
sessionId是由服务器生成的一个“唯一性字符串”,从session机制的角度来看,这个唯一性字符串称为"sessionId"。但是站在整个登录流程中看待,也可以把这个唯一性字符串称为"token"。sessionId和token就可以理解成是同一个东西的不同叫法。
Session给当前的用户分配一个SessionId,同时记录下当前用户的一些身份信息。此时,SessionId就会被返回到浏览器的Cookie中,浏览器访问服务器都会带着这个SessionId,从而能够让服务器识别出当前的用户身份。
注:Servlet的Session默认是保存在内存中的,如果重启服务器则Session数据就会丢失
二、Cookie和Session的联系和区别
1、联系
Session会将会话Id存储到Cookie中。
2、区别
(1)、Cookie是客户端的机制,Session是服务器端的机制
(2)、Cookie和Session经常会在一起配合使用,但是不是必须配合:
- 完全可以用Cookie来保存一些数据在客户端,这些数据不一定是用户身份信息,也不一定是token/sessionId
- Session中的token/sessionId也不需要非得通过Cookie/Set-Cookie传递