首页 > 其他分享 >关闭浏览器后再次访问session 保证是同一个sessionid

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

时间:2023-06-01 19:02:53浏览次数:45  
标签:浏览器 name sessionid session cookie 关闭 response


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

标签:浏览器,name,sessionid,session,cookie,关闭,response
From: https://blog.51cto.com/u_14671216/6397700

相关文章

  • 浏览器配置微信模拟器
     1.打开浏览器控制台,选择移动端,选择Responsive->Edit 2.添加自定义设备①点击Addcustondevice,②输入设备名称如weChat,③输入配置内容:mozilla/5.0 (linux; u; android 4.1.2; zh-cn; mi-one plus build/jzo54k) applewebkit/534.30 (khtml, like gecko......
  • Self-Supervised Graph Co-Training for Session-based Recommendation
    目录概符号说明COTREC图的构建ItemViewEncodingSessionViewEncodingCo-TrainingContrastiveLearningDivergenceConstraint优化代码XiaX.,YinH.,YuJ.,ShaoY.andCuiL.Self-supervisedgraphco-trainingforsession-basedrecommendation.CIKM,2021.概自监......
  • postgresql 的 idle_session_timeout 与连接池的 max-ide-time参数
    看下面的异常:下面的错误说:terminatingconnectionduetoidle-sessiontimeout下面的这个错误说:Causedby:reactor.pool.PoolShutdownException:Poolhasbeenshutdownreactor.core.Exceptions$ErrorCallbackNotImplemented:org.springframework.dao.DataAccessResou......
  • hibernate session
       ......
  • Cookie、Session、Token、LocalStorage、SessionStorage
    Cookie简介:HTTP是无状态的,服务器无法记录收到的每一次请求,意味着服务器无法识别不同的请求是否来自相同的客户端。Cookie是服务器创建的一个对象,在收到客户端请求后,携带在响应头(Set-Cookie)中返回给客户端,客户端将Cookie存到本地,在下一次请求中将Cookie信息放到请求头发......
  • vue监听浏览器窗口大小变化,做对应的操作
    页面初始化mounted的时候,通过document.body.clientWidth和document.body.clientHeight获取到浏览器的宽和高,然后通过window.onresize来监听浏览器窗口的变化,在这里来改变我们的变量宽和高即可。(created()的时候不行,因为此时document还没有生成)<template><sectionclass="p-1......
  • 利用谷歌浏览器插件Autofill一键提取QQ裙所有QQ邮箱
     众所周知,QQ号是公开的,QQ号加上后缀@qq.com就是QQ邮箱。因此只要获取到一批QQ号就意味着获取到一批QQ邮箱,进而利用邮件群发技术来批量发送邮件获取客户。QQ群是QQ用户最集中的地方,在这里可以快速获取大量精准用户,下面详细讲解方法。如题,第一步:下载谷歌浏览器,然后安装Autofill插件......
  • QA|selenium打开浏览器后没有执行后面的代码(get请求)|UI自动化测试
    Q:selenium打开浏览器后没有执行后面的代码(get请求)代码如图: 原因:webdriver_path应该给的是chromedriver.exe的路径,而不是chrome.exe的路径,写错了,正确的如下: 查阅参考:Selenium打开浏览器,但拒绝执行下一行代码-我爱学习网(5axxw.com)......
  • 2023-05-31 如何解决小程序的session_key泄露问题
    前言:微信小程序在接口检测出session_key泄露的bug,要求去除请求和响应中的session_key。排查:前端无法直接处理该问题,问题定位到后端,是后端接口返回了该session_key字段,由此被微信检测出来,被微信认为不安全所致。解决方案:后端接口不返回该字段即可。参考资料:https://developers.w......
  • HttpSession
    (一)HttpSession介绍HttpSession:服务器端会话管理技术本质也是采用客户端会话管理技术。只不过在客户端保存的是一个特殊标识,而共享的数据保存到了服务器端的内存对象中。每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享!是Servlet规范中......