今天想和大家分享一个关于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结束生命周期,有以下两种办法:

    • 一个是Session.invalidate()方法,不过这个方法在实际的开发中,并不推荐,可能在强制注销用户的时候会使用;
    • 一个是当前用户和服务器的交互时间超过默认时间后,Session会失效

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

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

    客户端页面里使用js的window.onclose来监视浏览器的关闭动作,然后向服务器发送一

    个请求来关闭Session,但是这种做法在实际的开发中也是不推荐使用的,最正常的办法

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

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

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

    于浏览器的进程中的,当浏览器关闭时,Cookie也就不存在了。

  • 其实Cookie有两种:

    • 一种是存在于浏览器的进程中;
    • 一种是存在于硬盘上

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

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

    服务器从HttpServletRequest对象中没有检查到sessionid,服务器会再发送一个新的存

    有Sessionid的Cookie到客户端的浏览器中,此时对应的是一个新的会话,而服务器上

    原先的session等到它的默认时间到之后,便会自动销毁。

    ps:

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

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

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

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

浏览器关闭后,Session会话结束了么?的更多相关文章

  1. Java Web 浏览器关闭后Session就会被销毁吗?

    浏览器关闭后Session就会被销毁吗? Session是JSP的九大内置对象(也称为隐含对象)中的一个,用于保存当前用户的状态信息,初学者可能认为Session的生命周期是从打开一个浏览器发送请求到 ...

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

    今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了?  我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保 存当前用户的状态信 ...

  3. 如何让浏览器关闭后session失效

    llzzcc66 知道合伙人数码行家 推荐于2018-08-10   如果用户不点击网站的“退出”链接,而直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,解决方式如 ...

  4. 浏览器关闭后,Session就销毁了吗?

    https://blog.csdn.net/QQ1012421396/article/details/70842148 话题:       当浏览器关闭后,Session就销毁了吗?答案:      ...

  5. Session的生命周期之关于浏览器关闭后的Session

    Session是JSP的九大内置对象中的一个,它可以保存当前用户的各种的状态信息. 初次接触Session时认为Session的生命周期是从浏览器打开一个窗口发送请求开始,到浏览器窗口关闭结束.其实这 ...

  6. Session会在浏览器关闭后消失吗?

    转  http://blog.csdn.net/rongwenbin/article/details/51784310 Cookie的两种类型   在项目开发中我们时常将需要在客户端(浏览器)缓存的数 ...

  7. 浏览器关闭使session失效的问题多种解决方式

    直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,此举将会导致session失效,下面整理了一些解决方法,感兴趣的朋友可以参考下哈   如果用户不点击网站的“退出”链 ...

  8. Django实战(一)-----用户登录与注册系统6(session会话、注册视图)

    因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的.独立的. 通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户.对于 ...

  9. java 浅谈web系统当中的cookie和session会话机制

    一 Cookie: 1. Cookie翻译为小甜饼,有一种特殊的味道.cookie主要用来在(浏览器)客户端做记号用的.Cookie不属于java,Cookie是一种通用的机制,属于HTTP协议的一部 ...

随机推荐

  1. canvas练手项目(一)——选取图片

    今天无事可做,在春意盎然的下午突发奇想想做一个关于图片处理的在线网页应用.不要问我为什么做这个,因为我想做!关于这个项目,我想基于canvas来实现,canvas是个好东西,我一直很喜欢,就是我没有做 ...

  2. VS中Ctrl+F5(开始执行不调试)一闪而过问题

    昨天学弟学妹在使用VS2015时,遇到了Ctrl+F5运行完毕程序窗口不能停留的问题,感觉比较奇怪.后来了解到他们建立C++解决方案时,直接选中的是空项目,而这样就会导致这样的现象. 想要达到运行完毕 ...

  3. highCharts实现简单柱形图

    js: function chart(data,title){ $('#container').highcharts({ chart: { type: 'bar' }, title: { text: ...

  4. python PEP8相关介绍

    在学习了python相关技术之后,开始重视其开发规范,以满足代码的可读性以及可维护性.主要的是学习了PEP8-style for python code的相关内容. 代码布局 缩进:每一级4个缩进.连 ...

  5. JAVA面向对象思想

    1.面向对象的基本特征     面向对象具有三个基本特征:封装.多态.继承.      1)封装             封装指的是将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能. ...

  6. html2canvas不能识别svg的解决方案

    最新有个功能需要截取网页成图片,于是用到比较流行的html2canvas,本来以为能顺顺利利的搞定,后来发现网页上的流程图连接线不在截图中.于是各种百度.bing,也搜到好多,但是感觉没有一个完整的代 ...

  7. Linux shell 脚本(一)

    一.初识脚本 shell:一类介于系统内核与用户之间的解释程序.脚本:一类使用特定语言,按预设顺序执行的文件批处理.宏.解释型程序创建shell脚本:理清任务过程--整理执行语句--完善文件结构1.任 ...

  8. IIS前端页面不显示详细错误解决方法

    要想解决这个问题,有三种方法可以考虑: 1.Internet信息服务(IIS)管理器 2.Web.config文件 3. 命令行 在IIS的"错误页"右边的"编辑功能设置 ...

  9. 用vue开发一个app(4,一个久等了的文章)H5直播平台登录注册(1)

    我上一篇关于vue的文章和这一篇时间隔了有点久了.最近终于写完了. 因为我一直想写个有点实绩的东西,而不是随便写一个教程一样东西.结合最近在项目中学到的经验和我的一点创意. 首先介绍下这是个什么! H ...

  10. Navicat通过跳板机连接数据库

    完成对应设置后,即可连接数据库,本人亲测!