关闭浏览器后再次访问session 保证是同一个sessionid

关闭浏览器后再次访问session 保证是同一个sessionid

我们知道在正常情况下,发送http请求时,消息头中会自动携带cookie信息,这其中就会包括SESSIONID信息,所以只要我们没有关闭浏览器,消息头中都会自动携带这个信息,以供服务器访问相应的session。 
但是如果我把浏览器关闭了呢?这样的话,我该如何再次访问相应的session呢?

我们可以这样做,来实现这个需求(结合cookie)

//在servletA中设置cookie
public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        HttpSession session = request.getSession();
        session.setAttribute("name", "张三");
        out.println("创建一个session并放入姓名属性");
        //手动添加cookie,保存JSESSIONID信息
        Cookie cookie = new Cookie("JSESSIONID", session.getId());
        cookie.setMaxAge(60*30);//设置cookie的生命周期为30min
    相应 给浏览器一个 session id   
        response.addCookie(cookie);
    }


//在servletB中就可以正常访问session了
        public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        HttpSession httpSession = request.getSession();
        String name = (String) httpSession.getAttribute("name");
        out.println("name = "+name);
    }

 

 

我们来分析为什么可以这样做?

首先,session的声明周期是可以自己来设置的,默认的是30分钟,那么当我们关闭浏览器之后,这个浏览器对应的session其实还没有消亡,(如果我们需要它消亡的话,我们可以调用invalidate方法,这也是网站中的安全退出常见操作之一)。既然没有消亡,为什么关闭浏览器之后,我们就访问不到了呢?那是因为cookie中的JSESSIONID信息没有了,不会自动携带这个session信息了,服务器找不到对应的session,就会自动添加新的session,这个新添加的session显然不是我们需要的。所以,我们就可以利用cookie来实现这个需求。只要我们手动为cookie中添加JSESSIONID信息,那么不管你的浏览器是否关闭,我的cookie中都会携带JSESSION信息,这样的话,服务器就一定能够找到对应的session,而不会重新建立一个新的session,这样只要session没有消亡,就一定可以访问到对应的session。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码: ``` import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SessionInfoServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Integer count = (Integer)session.getAttribute("count"); if (count == null) { count = 1; } else { count++; } session.setAttribute("count", count); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Session Information</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Session Information</h1>"); out.println("<p>Session ID: " + session.getId() + "</p>"); out.println("<p>Creation Time: " + new Date(session.getCreationTime()) + "</p>"); out.println("<p>Last Accessed Time: " + new Date(session.getLastAccessedTime()) + "</p>"); out.println("<p>Access Count: " + count + "</p>"); out.println("</body>"); out.println("</html>"); } } ``` 在上面的代码中,我们首先获取当前的HttpSession对象,并从中获取名为“count”的属性。如果该属性不存在,则将其设置为1,并将其存储回HttpSession对象中。如果属性已经存在,则将其值加1。这样,每次刷新页面或关闭浏览器再次访问访问计数器都会增加1。 接下来,我们通过调用HttpSession对象的方法获取会话ID、创建时间和最后访问时间,并将它们显示在HTML页面中。最后,我们将访问计数器的值也显示在页面上。 要在Web应用程序中使用这个servlet,我们需要在web.xml文件中添加以下代码: ``` <servlet> <servlet-name>SessionInfoServlet</servlet-name> <servlet-class>SessionInfoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SessionInfoServlet</servlet-name> <url-pattern>/sessioninfo</url-pattern> </servlet-mapping> ``` 这将会将Servlet映射到URL路径“/sessioninfo”上,以便我们可以通过浏览器访问它。例如,如果我们的Web应用程序部署在localhost:8080/myapp中,那么我们可以通过访问URL“http://localhost:8080/myapp/sessioninfo”来访问该servlet。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值