1.Session存在服务器端,服务器会为不同的用户创建不同的Session
2.不同内核浏览器的Session不同
3.同一浏览器的不同标签共享同一个Session,同一浏览器不同打开的窗口共享同一个Session
4.Session的默认失效时间30分钟,一但有人访问,重新置为30分钟
4.Session创建时会生成一个id,并将此id(JSESSIONID)保存到Cookie,写入到浏览器。此Cookie的生命周期为浏览器关闭失效。当在访问服务器时,都会携带JSESSIONID
5.所以浏览器关闭后,就失去了JSESSIONID,便无法获取到之前的session,之前的session过了失效时间便不存在
6.解决浏览器关闭无法获取上次的session的方法
1.手动添加保存JSESSIONID的cookie,并延长cookie的时间
HttpSession session=request.getSession();
String id=session.getId();
Cookie cookie=new Cookie("JSESSIONID",id);
cookie.setMaxAge(3600);
cookie.setPath("/");
response.addCookie(cookie);
2.用户禁用cookie的话,使用url重写的方法(关闭浏览器后不能使用上次的session了)
1.java中采用response的encodeURL(url)(只要是编码的方法都可以好像)进行url重写
servlet中:
HttpSession session = req.getSession();
session.setAttribute("username", "xiaoming");
String url = resp.encodeURL("到某个url时,需要获取session的数据 的url");
resp.sendRedirect(url);
或者:
out.println("<a href='"+url+"'>获取session的页面</a><br/>");
//url重写前,必须要有request.getSession(),不然不会再超链接后带上JSESSIONID。
结果:<a href="/TestSession;jsessionid=F9412A52243B6B4963CE5FF8BF6592B6">获取session的页面</a>
jsp中:
控制器的代码:
HttpSession session = req.getSession();
session.setAttribute("username", "xiaoming");
req.getRequestDispatcher("/WEB-INF/page/index.jsp").forward(req, resp);
jsp的代码:
<a href="<%=response.encodeURL(“/TestSession”) %>"></a>
jsp的结果:
<body>
<a href="/TestSession;jsessionid=6312B62AAB8C7A0EE4498507CAA0E0D9">获取session</a>
</body>
这些方法会判断,如果请求没有jsessionid,会自动在链接后加上jsessionid