原因:
因为默认情况下,当getSession()后,session就被被创建。session在创建时,服务器会通过Cookie返回session 的ID给浏览器,之后服务器根据浏览器Cookie里的session的ID来分辨不同用户。但是,这种方法返回的cookie是保存在浏览器的内存中,浏览器关闭后内存会被清理,所以在session在关闭浏览器后就失效了。虽然在服务器保存的session会在在有效期后才会被销毁,但是用户的cookie里没有session的ID,服务器就不能判断出当前用户是否是原先的那个用户。
解决方法:
我们可以创建一个新的CooKie,该Cookie的名字为jsession,path为WEB应用的虚拟路径,并设置setMaxAge()的毫秒值,让Cookie保存在客户端的硬盘中,这时即使多次对浏览器进行关开操作是不会清楚客户端硬盘文件的。所以,Cookie就不丢失了,SessionId也不会随浏览器关闭而丢失。
具体代码实现:
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setPath(request.getContextPath()+"/");
cookie.setMaxAge(30*60);
response.addCookie(cookie);