session何时被创建,何时被销毁以及设置session过期时间

您所在的位置:网站首页 sessions是什么牌子 session何时被创建,何时被销毁以及设置session过期时间

session何时被创建,何时被销毁以及设置session过期时间

2024-03-17 16:23| 来源: 网络整理| 查看: 265

问题:session什么时候被创建?

一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如

Servlet )调用HttpServletRequest.getSession(true)这样的语句时才会被创建。

在浏览资料博客时,都能看到上面这句话,我一直疑惑我的代码中没有

HttpServletRequest.getSession(true),为啥还创建了session,以下为测试

新建了一个web项目 test

一 、 能获取session

1.单独运行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();才创建对象。

二、不能获取session

index.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