HttpSession实现的技术内幕

Session通常用来保存客户端与服务器本次会话过程的一些数据,例如用户信息等,Session是保存在服务端的。Session如何为每个客户端都能保存不同的数据?

  1. 当程序调用request.getSession()方法时,会看当前请求有没有携带一个叫JSESSIONID的cookie,如果有这个值(相当于客户端的身份证),则服务器就会根据这个值,找到其对应的Session信息。

  2. 这个JESSIONID从何而来?客户端第一次调用request.getSession()方法时,在响应的时候会创建一个cookie,cookie的key为JSESSIONID,值就是一串字符串,然后客户端每次发请求都会带着这个cookie,那客户端下一次再调用request.getSession时,此时服务器就可以获取这个客户端的JSESSIONID,那么就可以找到该客户端保存的session信息。

我们可以看到,第一次调用request.getSession方法时,浏览器返回的cookie
在这里插入图片描述
,此后,每次发送请求都会讲JSESSIONID这个cookie带上
在这里插入图片描述

  1. 通常说,浏览器已关闭,session就会失效,其实浏览器一关闭,cookie也没了(cookie默认在浏览器关闭的时候丢失),当浏览器再次打开时,已经没有了JSESSIONID这个cookie,那么再向服务器发送请求时,自然不会携带这个cookie,那么此时服务端就认为当前客户端没有创建session,就会重新创建session,然后给客户端返回JSESSIONID。

猜你喜欢

转载自blog.csdn.net/qq_43750656/article/details/120395826