session何时被创建,何时被销毁以及设置session过期时间 |
您所在的位置:网站首页 › sessions是什么牌子 › session何时被创建,何时被销毁以及设置session过期时间 |
问题:session什么时候被创建? 一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet )调用HttpServletRequest.getSession(true)这样的语句时才会被创建。 在浏览资料博客时,都能看到上面这句话,我一直疑惑我的代码中没有 HttpServletRequest.getSession(true),为啥还创建了session,以下为测试 新建了一个web项目 test 一 、 能获取session1.单独运行jsp index.jsp (jsp网页默认包含page指令 ) 在Tomcat服务器运行index.jsp,可以在tomcat的如下目录得到index.jsp编译后的Java文件 index_jsp.java,打开index.Java文件会看到 session = pageContext.getSession() 获取创建session // index_jsp.java 中创建 session session = pageContext.getSession(); // 类似以下两种写法 // 1 、创建一个新的session session = request.getSession(true); // 2 、有则获取现有的session,没有则创建一个新的session session = request.getSession();运行第一次,返回了 JSESSIONID ,说明以创建了 session 刷新网页 创建两个session 但路径不同 综上两点所述,session直到session = pageContext.getSession();才创建对象。 二、不能获取sessionindex.jsp添加 后,需要关闭浏览器所有窗口或者关闭浏览器进程,负责上面测试的sessionid还在浏览器进程中保留得不到预期结果。 服务器没有返回JSESSIONID ,说明没有创建session 打开index_jsp.java文件 可以看到在里面没有发现 创建session的语句 三 、Session结束生命周期以及设置session过期时间:1 、 Session.invalidate() 方法,不过这个方法在实际的开发中,并不推荐,可能在强制注销用户的时候会使用; 2、 当前用户和服务器的交互时间超过默认时间后,Session会失效 设置方法: ①、 session.setMaxInactiveInterval(30*60); //单位秒 ②、 设置当前应用 web.xml 600③ 、设置 tomcat web.xml 600同一 session 优先级 ① > ② > ③ 四、 总结Session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送任何请求来关闭 Session,自然Session也不会被销毁,但是可以做一点努力,在所有的客户端页面里使用js的 window.onclose来监视浏览器的关闭动作,然后向服务器发送一个请求来关闭Session,但是这种做法在 实际的开发中也是不推荐使用的,最正常的办法就是不去管它,让它等到默认的时间后,自动销毁。那 么为什么当我们关闭浏览器后,就再也访问不到之前的session了呢?其实之前的Session一直都在服务 器端,而当我们关闭浏览器时,此时的Cookie是存在于浏览器的进程中的,当浏览器关闭时,Cookie也 就不存在了。其实Cookie以下有两种存储形式: 1 、 一种是存在于浏览器的进程中; 这种Cookie我们称为会话Cookie,当我们重新打开浏览器窗口时,之前的Cookie中存放的Sessionid已经 不存在了,此时不能获取JSESSIONID=Sessionid的session,服务器会返回一个新的Sessionid(即新的 session),此时为一个新的会话,而服务器原先的session会等到过期时间自动销毁。 2 、一种是存在于硬盘上(即持久化到硬盘) 这种持久化到磁盘中,即使关闭浏览器,cookie已经被写入磁盘,依然可以获取sessionid,即可以获 取session状态(多用于自动登录,好多网站登陆过过一段时间访问还登录,就是利用的持久化cookie, 如百度网盘、csdn…(ps:这句话不能保证,他们网站怎么实现不确定,感觉像这么回事)) Google cookie默认本地存放目录 C:\Users\xxxxxx\AppData\Local\Google\Chrome\User Data\Default\Cache ps: 当cookie存在于浏览器进程中时(有些浏览器不支持以下规则,如IE的sessionid在两个客户端之间不共享) 1 、 在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session; 2 、 不在同一个窗口中打开相同的浏览器时,发送请求,仍是同一个session; 3 、 当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session; 4 、 重新打开窗口,发起相同的请求时,是不同的session |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |