关闭浏览器session就被干掉的假象的问题

当在前台取出session时,关闭浏览器后再次访问服务器,这时服务器返回了一个null,此时的返回的session并非之前的那个session而是一个新的session。

-->先来看看session的生命周期:

  创建:当getSession()后,session就被创建。

  结束:有三种结束生命的情况 >>

        1.服务器会默认一个30分钟的生命时间值,若在这个期间,为被访问服务器时就会自动结束生命;

          |--可以在服务器下的web.xml文件中的 <session-timeout> 30 </session-timeout> 修改这是默认值,是以分为单位。

        2.session自杀: 调用session.invalidate()方法可以立即杀死session;

        3.服务器意外关闭。(服务器正常关闭时session是会被服务器保存在服务器的 session.ser 文件中(在work文件夹下))

--> 当关闭浏览器时怎么就会有session干掉的假象呢?

  由于session是基于Cookie的。浏览器发起请求会携带sessionId到服务器,服务器根据这个id来判读当前访问的是哪个session。

  然而浏览器被关闭后由于浏览器的Cookie文件还未设置MaxAge值,所以在此时浏览器的Cookie是会话级别的,是存在浏览器的内存中,当浏览器被关闭浏览器的内存被释放,临时文件被清除,这时的Cookie也随之销毁,则当前这个请求中被没有之前的那个sessionId值,服务器就当时第一次访问,给浏览器创建一个新的session值并返回一个null;

  但是之前的那个session并没有被干掉,只是浏览器找不到这个sessionId了。这样一来,此时服务器器就存在了两个session了。

-->解决这个假象的方案

   我们可以创建一个新的CooKie,该Cookie的名字为jsession,path为WEB应用的虚拟路径,并设置setMaxAge()的毫秒值,让Cookie保存在客户端的硬盘中,这时即使多次对浏览器进行关开操作是不会清楚客户端硬盘文件的。所以,Cookie就不丢失了,SessionId也不会随浏览器关闭而丢失。

  具体代码实现:

    Cookie cookie = new Cookie("JSESSIONID", session.getId());
           cookie.setPath(request.getContextPath()+"/");
           cookie.setMaxAge(30*60);
           response.addCookie(cookie);

时间: 2024-11-07 15:40:51

关闭浏览器session就被干掉的假象的问题的相关文章

对关闭浏览器后Session对象失效的理解

Session是在客户端请求到达服务器时,服务器为此请求发出的客户所创建的一个对象,保存在服务器端.购物车是一个很好的例子,一个用户可以有很多session,但每个session只针对一个用户,这就保证了不同session之间的信息独立. 首先说明一点,在通常意义上,session所能发挥作用是基于cookie机制.针对所需要解释的问题,做这样一个假设:我们第一次访问一个网页.当客户端发送请求后,服务端会建立一个针对此请求发出客户的session对象,而且每个session都会有一个sessio

关闭浏览器后Session失效原因分析

参考文章:http://www.tuicool.com/articles/VNbYjqm 首先需要理解一下几点: 1.Http是无状态的,即对于每一次请求都是一个全新的请求,服务器不保存上一次请求的信息 2.Session是保存在服务端的,为什么后续请求会读取到session?因为请求会包含一个sessionId,该值存储在cookie中,服务器通过这个sessionId找到对应的session 3.cookie是有过期时间的,规则如下: Cookie的Max-Age决定了Cookie的有效期,

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

直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,此举将会导致session失效,下面整理了一些解决方法,感兴趣的朋友可以参考下哈 如果用户不点击网站的“退出”链接,而直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,解决方式如下: 方式1:在每个页面中加入隐藏的IFrame,以异步刷新的方式定期刷新iframe页面,如每隔10S刷新一次,当服务器在一定的时间内未收到用户的刷新请求,则认为用户已经退出 优点:能在短时间内判断出用

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

浏览器关闭后Session就会被销毁吗? Session是JSP的九大内置对象(也称为隐含对象)中的一个,用于保存当前用户的状态信息,初学者可能认为Session的生命周期是从打开一个浏览器发送请求到关闭浏览器,这是错误的. Session的运行机制 当用户第一次访问一个支持Session的Web应用时,会开启一个新的Session会话.当用户浏览这个Web应用的不同网页时,始终处于该Session中.具体而言: 1 当开启一个新的Session会话时,Servlet容器会创建一个HttpSes

关闭浏览器自动退出账号

前台: //当该页面被关闭之间触发该方法,在这个方法里面进行自己要的操作 window.onbeforeunload=function(){ alert("关闭浏览器"); } //但是刷新后,也会被触发 后台: SessionScanner扫描session存在的时间来判断是否退出 a)当SessionList中有Session时,可以使用定时器,每隔一定时间去检测该集合中的HttpSession是否无用, 如果无用,则从集合中删除,并销毁该HttpSession. b)要考虑到用户

如何关闭浏览器的HSTS功能

在安装配置 SSL 证书时,可以使用一种能使数据传输更加安全的Web安全协议,即在服务器端上开启 HSTS (HTTP Strict Transport Security).它告诉浏览器只能通过HTTPS访问,而绝对禁止HTTP方式. HTTP Strict Transport Security (HSTS) is an opt-in security enhancement that is specified by a web application through the use of a

Python学习打开页面,关闭浏览器

通过Python的打开页面和关闭浏览器,实现对页面阅读次数的增加. 有些博客页面的阅读次数,只是简单的通过打开页面来计数的,如果是这样我们就可以通过Python进行刷阅读次数. #-*- coding: utf-8 -*- # refresh blog # 刷新博客阅读次数 # 使用打开页面,关闭浏览器的原理 # 打开10次,关闭一次浏览器 import webbrowser as web import time import os url = 'http://8796902.blog.51ct

关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器

这篇文章主要介绍了关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器,需要的朋友可以参考下.希望对大家有所帮助 Firefox 和 IE 的浏览器各自实现了input历史记录的功能,可以简化输入时的麻烦,但是,有时候弹出的下拉框会挡住页面显示内容,而且在某些情况下也不需要对input框进行记录,如号码查询的input框,用户不会对同一个号码进行多次查询,就没有必要让浏览器记录. MSIE自定义了input 的扩展属性 autocomplete,置为off即可 <input typ

php关闭浏览器不终止运行

ignore_user_abort(true); 这个函数表示断开客户端是否会影响脚本运行 默认false,关闭客户端,php停止运行,改为true之后,关闭浏览器php继续运行,防止浏览器崩溃导致脚本中断set_time_limit(0); php默认30秒后台还没有响应结束就自动中断 这个设置为0就表示不限制这个时间,表示一直执行清除缓冲区ob_flush() flush()