session失效的原因
session的原理
在了解原因之前,需要知道一个很重要的知识点
-
session是基于cookie实现的
-
当浏览器向服务器发送数据的时候,每次都会携带cookie,
session会话开始的时候,服务器会从浏览器传过来的cookie中查找JSessionId的值
并和服务器中存储session对象的map表的key进行比较 -
如果cookie中没有JSessionId,说明这是第一次会话,
服务器会创建一个session对象,并保存到Map表的value中,key保存session的唯一性id
同时,服务器会将session对象的唯一Id保存到cookie的JsessionId对应的值中,并发送给浏览器。 -
当浏览器再次访问服务器时,会将cookie中的JsessionId发送过来,服务器依据 JsessionId的值找到对应的session对象。
从而保证了用户的会话状态
session失效的原因
- 创建session后,session将会创建一个cookie,名为JSESSIONID,值为当前session的id
- 注意:此时,cookie中保存JSESSIONID的时间是默认的-1,
即,关闭浏览器,cookie的JSESSIONID失效 - 所以,再次打开浏览器时,虽然服务器的session仍然有效,但是,cookie的JSESSIONID失效
session 并不是随着浏览器的关闭而关闭的
session只会随着其生命周期结束或者强制销毁
可以通过下面这种方法解决
//1.创建cookie对象
//Cookie是可以覆盖的,如果重复写入同名的Cookie,那么将会覆盖之前的Cookie。
Cookie cookie=new Cookie("JSESSIONID",session.getId());//覆盖
//2.持久化存储,设置cookie存活时间[保存在硬盘中的时间]
cookie.setMaxAge(1*60*60*24);//参数单位是秒,在硬盘保存1天,60*60*24
//3.发送Cookie对象
response.addCookie(cookie);
- 但,通常情况下,很少被用到
- 通常利用cookie实现免密登录,替代这个过程
session失效的原因
session的原理
在了解原因之前,需要知道一个很重要的知识点
-
session是基于cookie实现的
-
当浏览器向服务器发送数据的时候,每次都会携带cookie,
session会话开始的时候,服务器会从浏览器传过来的cookie中查找JSessionId的值
并和服务器中存储session对象的map表的key进行比较 -
如果cookie中没有JSessionId,说明这是第一次会话,
服务器会创建一个session对象,并保存到Map表的value中,key保存session的唯一性id
同时,服务器会将session对象的唯一Id保存到cookie的JsessionId对应的值中,并发送给浏览器。 -
当浏览器再次访问服务器时,会将cookie中的JsessionId发送过来,服务器依据 JsessionId的值找到对应的session对象。
从而保证了用户的会话状态
session失效的原因
- 创建session后,session将会创建一个cookie,名为JSESSIONID,值为当前session的id
- 注意:此时,cookie中保存JSESSIONID的时间是默认的-1,
即,关闭浏览器,cookie的JSESSIONID失效 - 所以,再次打开浏览器时,虽然服务器的session仍然有效,但是,cookie的JSESSIONID失效
session 并不是随着浏览器的关闭而关闭的
session只会随着其生命周期结束或者强制销毁
可以通过下面这种方法解决
//1.创建cookie对象
//Cookie是可以覆盖的,如果重复写入同名的Cookie,那么将会覆盖之前的Cookie。
Cookie cookie=new Cookie("JSESSIONID",session.getId());//覆盖
//2.持久化存储,设置cookie存活时间[保存在硬盘中的时间]
cookie.setMaxAge(1*60*60*24);//参数单位是秒,在硬盘保存1天,60*60*24
//3.发送Cookie对象
response.addCookie(cookie);
- 但,通常情况下,很少被用到
- 通常利用cookie实现免密登录,替代这个过程