1. 什么是Cookie?
是由网站服务器发送到用户浏览器,存储在用户硬盘的小型文本文件。用来存储用户在这个网站使用的一些信息,这样服务器就可以根据浏览器发送的cookie来识别和跟踪特定的用户,从而提供个性化的服务和内容。cookie存储的格式是一些简单的键值对字符串,不会很占内存,同时cookie也有过期时限,一段时间后浏览器会自动清理cookie。对于不同的网站,都有不同的cookie。而cookie最常见的就是保存用户的登录信息,从而能够保证即使重新访问网站也能保持用户的登录状态,而不用重新登录。
2. 什么是Session?
session是服务器机制,当用户首次通过(或者说没有带cookie)访问网站的时候,服务器会为用户创建一个新的session,session就相当于一个对象,可以存需要的内容。并且会为每个用户分配一个session id, 以 session id为key,以session对象为value存储到内存中的哈希表中。
Servlet的Session默认是保存在内存中的,如果重启服务器则Session数据就会丢失。
3. 工作流程
以用户登录为例:
- 当用户在网站登录时(点击登录),会向服务器发送一个请求,服务器收到请求,创建session id和session对象。session对象里面保存了用户的用户名和密码,并将session id和session对象存储在哈希表中。
- 服务器返回响应,在响应中会带上session id。响应中的session id可以是通过set-cookie设置的,也可以是其他方式。
- 用户在浏览器收到服务器返回的响应,响应中有session id,在cookie中保存这个值。这个id就相当于身份令牌,用于让服务器识别自己的身份。
- 之后每次访问网站时,都会带上这个cookie,直到cookie过期。带上cookie访问网站之后,就不用重新登录了,因为cookie中的session id已经向服务器验证了你的身份。