关闭浏览器后依然可以访问原先的session区域

问题:把浏览器关闭了之后,session区域依然存在,但开浏览器却无法访问原来同一个session区域。

原因:jsessionid在浏览器关闭后自动销毁,重新开启浏览器后无法获取原来的jsessionid并查找原来的session区域。

补充:session生命周期

    创建:第一次指定request.getSession();

    销毁:服务器关闭、session失效/过期、手动session.invalidate();

解决方案:cookie默认是会话级别并可以存储到客户端中,可以将获取到的jsessionID存入当前cookie中并把cookie的生存时间设置久一些。重新打开浏览器后自动查找之前cookie内的jsessionID键并查找到对应的

jsessionID值,随后访问原来已存储到服务器session区域中的内容。

 1 package session;
 2
 3 import java.io.IOException;
 4 import javax.servlet.annotation.WebServlet;
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.Cookie;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import javax.servlet.http.HttpSession;
11
12 @WebServlet("/session1")
13 public class seesionservlet1 extends HttpServlet {
14     private static final long serialVersionUID = 1L;
15
16     protected void doGet(HttpServletRequest request, HttpServletResponse response)
17             throws ServletException, IOException {
18
19         //创建属于该客户端私有的session的区域
20         HttpSession session = request.getSession();            //request.getSession()内部判断客户端在服务器端是否有session存在,不存在则新建session,存在,调用并返回session
21
22         session.setAttribute("name", "jerry");
23
24         String id = session.getId();
25
26         //防止关闭浏览器后JESSION ID消失,把SESSION ID存入cookie中并为其设置持久化时间 
27         Cookie cookie = new Cookie("JSESSIONID", id);
28
29         cookie.setPath("/");
30
31         cookie.setMaxAge(60*10);
32
33         response.addCookie(cookie);
34
35         response.getWriter().write("JSESSIONID:" + id);
36
37         String cookieName = cookie.getName();
38         String cookieValue = cookie.getValue();
39
40         System.out.println(cookieName + " "  + cookieValue);
41     }
42
43     protected void doPost(HttpServletRequest request, HttpServletResponse response)
44             throws ServletException, IOException {
45
46         doGet(request, response);
47     }
48
49 }

获取jsessionID并存入cookie

关闭并重新打开浏览器,找到cookie访问查找键JSESSIONID并获取其值

遇到问题

在设置cookie有效路径时,只有

cookie.setPath("/");

 即设置成 Tomcat 下所有Web项目皆可访问该cookie,重新开启浏览器后才能找到该cookie,原因待查找。

12-24 10:47
查看更多