简单了解Cookie和Session
Cookie实际上就是一小段文本信息
Cookie的作用是客户端本地保存用户的身份信息。
使用场景如登录页面内的多少天免登陆/记住密码等
Session指的是Web系统的会话,指用户登录以后,在退出之前都是一个会话
Session的作用就是用户登录的时候,服务器保存用户的身份信息。在之后访问的敏感资源的时候获取到用户的身份信息。
-
Cookie详解
- Cookie的意义
-
Cookie通过给客户端们颁发一个通行证,每个人访问的时候都必须带上自己的通行证,这样颁发一个服务器就能从通行证上确认客户身份了。
- Cookie是为了弥补HTTP协议无状态这一不足而出现的机制
-
由于HTTP协议是无状态的协议,一旦数据交换结束,客户端和服务器的连接就会关闭,HTTP协议对之前处理的事务没有记忆。因此我们需要有一段文本信息能够对我们之前一段时间内的访问信息进行一个保存,以便于下次更快速的进行访问。
- Cookie的具体实现
-
Cookie本质上就是一段文本信息.
1⃣️客户端请求服务器的时候,如果服务器需要记录该用户,就用response向客户端颁发一个Cookie。
2⃣️客户端会把Cookie保存起来,当再次访问请求这个服务器的时候,客户端把请求的URI和Cookie一起发送给服务器,服务器检查Cookie,以此来辨别用户状态。
举个例子:cookie就像你逛淘宝时的足迹记录,能够把你所浏览过的一定数量的宝贝记录下来,以便于当你想把曾经浏览过的宝贝加入购物车时能够迅速找到。
-
Session详解
- Session的意义
-
Session是服务器端使用的一种记录客户端状态的机制。Session就是通过给用户建立一个档案,查询档案来确认用户身份。
- Session的具体实现
-
在客户端访问服务器的时候,服务器会开辟一块内存空间,把客户端信息以某种形式(Session对象)记录在服务器上使用,存储结构为ConcurrentHashMap,再次访问的时候只需要从该Session中查找用户信息就行。
-
用户登录的时候,服务器用(Map<value, session>)保存用户的身份信息,在之后访问的敏感资源的时候,通过请求key =value,服务端通过key对应到value,然后在map中获取到用户的身份信息。
- Session的位置与存在时间
-
一般为了保证更高的存取速度,服务器把Session放在服务器内存中,每个用户都会有一个独立的Session。
-
为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个长时间就是Session的超时时间。
Session和Cookie是如何联系起来的?
- 服务器第一次收到请求后,开辟一块Session空间。
- 在空间内创建Session对象,同时生成一个Session id,并通过响应头中的Set-Cookie命令(如下)向客户端要求设置Cookie。
Set-Cookie:JSESSIONID=xxxxxxx 命令
- 客户端收到响应后,在本机客户端设置一个Cookie信息(如下),这个Cookie的结束时间为这次会话结束。
Cookies信息:JSESSIONID=xxxxxxx
- 接下来客户端每次向用一个服务器发送请求的时候,请求头里都会带上该cookie信息,然后,服务器通过读取请求头中的Cookie信息,获取JSESSIONID的值,得到本次请求的Session id。
注意:
- 用户登录成功候,响应头中包含cookie信息:
Set-Cookie:key=value1
- 本地Cookie保存的信息,在每次请求敏感资源的时候,都会在请求头中携带发送,格式为:
Cookie: key1=value1&key2=value2…
- 很多Web服务器Session的实现方式都是采用Cookie来实现的,在请求头/响应头中携带Cookie信息。
- 服务器:只会在第一次客户端请求的响应中,在响应头上加上Set-Cookie:JSESSIONID=xxxxxxx 信息,接下来同一个会话的响应中,不再添加。
客户端:必须在每次请求头中带上
Cookie:JSESSIONID=xxxxxxx 信息。