request.getSession() 底层逻辑实现:
- 判断客户端的请求中是否有一个名字叫做"JSESSIONID"的 cookie ,如果没有;就会新创建一个 Session 对象,并且将这个 Session 对象的 ID 以 cookie 的形式存放到客户端,该 Cookie 的 name 叫"JSESSIONID"
- 如果有:则取出 cookie 中的 session 的 ID,到服务器内存中,查找 ID 相同的 session对象
由此衍生出一些问题:
-
首先,Session 是 存在于我们服务端的,那么如果浏览器关闭,session 会不会失效?
答案是:会失效 ! ! ! 为什么浏览器关闭 session 会失效?是因为 session 对象销毁了吗?session 对象没销毁,因为存放 ID 的 cookie 销毁了,所以就无法找到原来的那个 session 了。就拿不到原来那个 session 中的数据了
-
当我们反复关闭浏览器,那就会在服务器内存中创建很多个 session 对象,这样会不会造成内存溢出呢?
答案是:不会,因为 session 有它自己的声明周期,闲置 30 分钟之后,就会销毁。
什么时候会销毁 session 对象呢:
1、闲置 30 分钟
2、关闭服务器
3、手动调用 session 的 invalidate() 方法