分享

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

 一本正经地胡闹 2019-10-10

我们知道在正常情况下,发送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。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多