Java web之四session

当浏览器关闭时,Session就被销毁了?

Session是JSP的九大内置对象(也叫隐含对象)中的一个,
它的作用是可以保存当前用户的状态信息

认为Session的生命周期是从打开一个浏览器窗口发送请求到关闭浏览器窗口
但其实这种说法是不正确的!

☆ Session的运行机制

  1. 当一个Session开始时,Servlet容器会创建一个HttpSession对象
    那么在HttpSession对象中,可以存放用户状态的信息
    2.Servlet容器HttpSession对象分配一个唯一标识符即SessionidServlet容器Sessionid作为一种Cookie保存在客户端的浏览器

3.用户每次发出Http请求时,Servlet容器会从HttpServletRequest对象中取出Sessionid,
然后根据这个Sessionid找到相应的HttpSession对象,
从而获取用户的状态信息

☆ Session的生命周期

销毁session

第一: 是Session.invalidate()方法,
不过这个方法在实际的开发中,
不推荐,可能在强制注销用户的时候会使用;

第二: 是当前用户和服务器的交互时间超过默认时间后,
Session会失效

第三: Session是存在于服务器端的,
当把浏览器关闭时,浏览器并没有向服务器发送任何请求来关闭Session,自然Session也不会被销毁,
但是可以做一点努力,在所有的客户端页面里使用jswindow.onclose来监视浏览器的关闭动作,
然后向服务器发送一个请求来关闭Session,
但是这种做法在实际的开发中也是不推荐使用的,

最正常的办法就是不去管它,让它等到默认的时间后,自动销毁

那么为什么当我们关闭浏览器后,就再也访问不到之前的session了呢?

其实之前的Session一直都在服务器端,而当我们关闭浏览器时,此时的Cookie是存在于浏览器的进程中的,当浏览器关闭时,Cookie也就不存在了。

其实Cookie有两种:
一种是存在于浏览器的进程中;
一种是存在于硬盘上

sessionCookie是存在于浏览器的进程中,
那么这种Cookie我们称为会话Cookie

当我们重新打开浏览器窗口时,
之前的Cookie中存放的Sessionid已经不存在了,

此时, 服务器从HttpServletRequest对象中没有检查到sessionid,服务器会再发送一个新的存
SessionidCookie到客户端的浏览器中,
此时对应的是一个新的会话,
而服务器上原先的session等到它的默认时间到之后,便会自动销毁。

☆ 总结一下

  1. 当在同一个浏览器中同时打开多个标签,
    发送同一个请求或不同的请求,仍是同一个session;

  2. 当不在同一个窗口中打开相同的浏览器时,发送请求,仍是同一个session;

  3. 当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;

  4. 当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,
    是不同的session,但是它和session的生命周期是没有关系的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值