当前位置: 代码迷 >> 综合 >> 关闭浏览器后再次访问session 保证是同一个sessionid
  详细解决方案

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

热度:76   发布时间:2024-03-07 06:49:06.0

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

 

 

注意: 简单理解就是 sessionId是存储在 cookie里面的  但是 cookie如果不设置过期时间 , 关闭浏览器后 cookie里面的信息 是无法保存的 , 需要设置cookie的过期时间。

  相关解决方案