关闭浏览器后,session是否还存在?

session是基于cookie的一种会话技术,  数据存放存放在服务器端。客户端在cookie携带JSESSIONID(tomcat服务器生成),来访问服务端,获取对应JSESSIONID的session数据。

session创建和销毁

创建:调用request.getSesion创建 
    
销毁:服务器关闭 , 会话超时(30分)

setAttribute 存放的值, 在浏览器关闭后,还有没有。  有!,就算客户端把电脑砸了也还有。

 

为何关闭浏览器后,再次访问会觉得session失效了呢,这里的失效意思是session的数据丢失了?

其实这里session数据并没有丢失,只是关闭浏览器后,因为默认的cookie生命周期为浏览器的内存,即关掉浏览器之后cookie就失效了,此时JSESSIONID也就没有了。再次访问后,服务器又生成一个新的JSESSIONID,此时request.getSession()通过JSESSIONID获取到的session就不是之前的session了。

 

解决:设置客户端 JSESSIONID  cookie的时间  

            Cookie[] cookies = request.getCookies();
            Cookie cookie = CookieUtils.findCookieByName(cookies, "JSESSIONID");
            cookie.setMaxAge(60*60);
            response.addCookie(cookie);

你可能感兴趣的:(Servlet)