Session会话是如何结束的
当浏览器关闭时,Session就被销毁了?
我们知道Session是JSP的九⼤内置对象(也叫隐含对象)中的⼀个,它的作⽤是可以保存当前⽤户的状态信息,初学它的时候,认为Session的⽣命周期是从打开⼀个浏览器窗⼝发送请求到关闭浏览器窗⼝,但其实这种说法是不正确的!
下⾯就具体的去解释:
当⽤户第⼀次访问Web应⽤中⽀持Session的某个⽹页时,就会开始⼀个新的Session,那么接下来当⽤户浏览这个Web应⽤的不同⽹页时,始终处于⼀个Session中
再详细些:
当⼀个Session开始时,Servlet容器会创建⼀个HttpSession对象,那么在HttpSession对象中,可以存放⽤户状态的信息
Servlet容器为HttpSession对象分配⼀个唯⼀标识符即Sessionid,Servlet容器把Sessionid作为⼀种Cookie存在客户端的 浏览器 中
⽤户每次发出Http请求时,Servlet容器会从HttpServletRequest对象中取出Sessionid,然后根据这个Sessionid到相应的HttpSession 对象,从⽽获取⽤户的状态信息
以上就是Session的运⾏机制,但是还没有提到Session的⽣命周期,再往下了解!
其实让Session结束⽣命周期,有以下两种办法:
1.⼀个是Session.invalidate()⽅法,不过这个⽅法在实际的开发中,并不推荐,可能在强制注销⽤户的时候会使⽤;
2.⼀个是当前⽤户和服务器的交互时间超过默认时间后,Session会失效
我们知道Session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送任何请求来关闭Session,⾃然Session也不会被销毁,但是可以做⼀点努⼒,在所有的客户端页⾯⾥使⽤js的lose来监视浏览器的关闭动作,然后向服务器发送⼀个请求来关闭Session,但是这种做法在实际的开发中也是不推荐使⽤的,最正常的办法就是不去管它,让它等到默认的时间后,⾃动销毁
那么为什么当我们关闭浏览器后,就再也访问不到之前的session了呢?
其实之前的Session⼀直都在服务器端,⽽当我们关闭浏览器时,此时的Cookie是存在于浏览器的进程中的,当浏览器关闭时,Cookie也就不存在了。
其实Cookie有两种:
⼀种是存在于浏览器的进程中;
⼀种是存在于硬盘上
⽽session的Cookie是存在于浏览器的进程中,那么这种Cookie我们称为会话Cookie
当我们重新打开浏览器窗⼝时,之前的Cookie中存放的Sessionid已经不存在了,此时服务器从HttpServletRequest对象中没有检查到sessionid,服务器会再发送⼀个新的存有Sessionid的Cookie到客户端的浏览器中,此时对应的是⼀个新的会话,⽽服务器上原先的session等到它的默认时间到之后,便会⾃动销毁。
ps:
当在同⼀个浏览器中同时打开多个标签,发送同⼀个请求或不同的请求,仍是同⼀个session;
当不在同⼀个窗⼝中打开相同的浏览器时,发送请求,仍是同⼀个session;
session如何设置和读取当使⽤不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;
当把当前某个浏览器的窗⼝全关闭,再打开,发起相同的请求时,就是本⽂所阐述的,是不同的session,但是它和session的⽣命周期是没有关系的.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论