专栏首页arebirth重生者的IT之路浏览器关闭后Session真的消失了吗?

浏览器关闭后Session真的消失了吗?

今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了?

我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保

存当前用户的状态信息,初学它的时候,认为Session的生命周期是从打开一个浏览器窗

口发送请求到关闭浏览器窗口,但其实这种说法是不正确的!下面就具体的去解释:

当用户第一次访问服务器web应用程序中支持session的某个程序的时候,客户端(浏览器)的请求头cookie属性中没有JSESSIONID信息,那么服务器接收到请求后执行了getSession()方法,首先会判断是否有JSESSIONID,如果不存在的话,就只姐创建一个新的Session,存在的话就会通过jSESSIONID取出对应的Session。

再详细些:

当一个Session开始时,Servlet容器会创建一个HttpSession对象,那么在HttpSession对象中,可以存放用户状态的信息

Servlet容器为HttpSession对象分配一个唯一标识符即Sessionid,Servlet容器把Sessionid作为一种Cookie保存在客户端的 *浏览器* 中

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

以上就是Session的运行机制,但是还没有提到Session的生命周期,再往下了解!

其实让Session结束生命周期,有以下两种办法:

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

一个是当前用户和服务器的交互时间超过默认时间后Session会失效

session.setMaxInactiveInterval(int seconds);//秒为单位

我们知道Session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送

任何请求来关闭Session,自然Session也不会被销毁,但是可以做一点努力,在所有的

客户端页面里使用JavaScript中的window.onclose来监视浏览器的关闭动作,然后向服务器发送一个请求来关闭Session,但是这种做法在实际的开发中也是不推荐使用的,最正常的办法就是不去管它,让它等到默认的时间后,自动销毁

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

其实之前的Session一直都在服务器端,而当我们关闭浏览器时,此时的Cookie是存在

于浏览器的进程中的(存放在内存中),当浏览器关闭时自然Cookie也就不存在了。

其实Cookie有两种:

一种是存在于浏览器的进程中(内存中)

一种是存在于硬盘上

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

当我们重新打开浏览器窗口时,之前的Cookie中存放的Sessionid已经不存在了,此时服务器从HttpServletRequest对象中的请求头里面没有检查到sessionid,服务器会再响应给客户端一个新的存有Sessionid的Cookie标识(JSESSIONID)到客户端的浏览器中,此时对应的是一个新的会话,而服务器上原先的session等到它的默认时间到之后,便会自动销毁

PS:

按照以上定理,我们可以设想一下,如果我们获取了某一个用户的JSESSIONID,那么我们是不是可以通过某些方式来把这个Session ID 写入到我们的浏览器中,来伪造对方呢?

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 操作mysql第一次访问速度慢(远程)

    最近在使用java操作远程的mysql数据库的时候,第一次请求非常的慢,而且极其容易引起系统的崩溃报错连接超时

    Arebirth
  • ZooKeeper学习之集群搭建

    1.2名字服务 名字服务这个就很好理解了。比如为了通过网络访问一个系统,我们得知道对方的 IP 地址,但是 IP 地址对人非常不友好,这个时候我...

    Arebirth
  • MyBatis 封装Map,返回不同实体的集合对象

      1.现在有一个需求,就是从100个表中获得任意表中的数据,按照正常的思维模式和处理方式,

    Arebirth
  • 部署SSL后,为何网站还是显示不安全?

    漫漫长夜,实在是无聊至极(ps.请忽视这个所谓的节日),正好近期遇到有些朋友问我关于SSL证书部署后的问题,又正好前天我遇到了这个问题。关于为什么部署了SSL证...

    乐网网络
  • 90%的程序员都没有完全回答对 Cookie 和 Session 的区别?

    我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?...

    纯洁的微笑
  • HTML5离线存储——manifest简介

    离线存储的作用 1、用户可离线访问应用,这对于无法随时保持联网状态的移动终端用户来说尤其重要 2、用户访问本地的缓存文件,通常意味着更快的访问速度 3、仅仅加载...

    IMWeb前端团队
  • HTML5离线存储——manifest简介

    3、仅仅加载被修改过的资源,避免同一资源对服务器多次的请求,大大降低了对服务器的访问压力

    IMWeb前端团队
  • 类似3D效果_CGAffineTransformScale

    Dwyane
  • Android 项目开发填坑记 - 使用 MultiDex 解决 64K 限制

    版权声明:本文为[他叫自己Mr.张]的原创文章,转载请...

    他叫自己MR.张
  • MySQL中的2个小问题

    今天晚上,在一个单机多实例的环境上,发生了一个错误,看着比较奇怪,之前也遇到过,但是没有留意,今天花了一点时间,搞了一下,问题得到了解决,跟大家分享一下。

    AsiaYe

扫码关注云+社区

领取腾讯云代金券