必威体育Betway必威体育官网
当前位置:首页 > IT技术

有关什么情况下session会失效

时间:2019-08-22 16:43:12来源:IT技术作者:seo实验室小编阅读:77次「手机版」
 

session 失效

以前发了一个帖子,觉得好奇很多人竟然认为关闭浏览器

session就失效了  或者认为session失效和关闭浏览器有关系

很多评论  让我很诧异啊

这边统一回复一下吧 

可以肯定的说session失效和浏览器是没有任何关系的

session本身有一个存活时间,在tomcat中默认的是30分钟,

和浏览器是没有关系的

因为即使你浏览器一直开着,如果在30分钟内没有发出任何请求,

那你原来存在服务器上的session域内的东西就全没有了,

你再次访问的时候,服务器会新建一个session的。

通过session的ID来判断是不是新的session

session时间的改变是通过session.getMaxInactiveInterval()改变的

session 失效除了上述的超时

还有就是调用invalidate()

或者服务器重启或者中断

所以如果当你设置session的MaxInactiveInterval为-1时

并且关闭了浏览器  那么你的session会一直存在

除非重启jsp服务器

我怎么觉得很多网站,关闭浏览器重新打开后,就要重新输入用户密码了

当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set-Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),或Set-Cookie JSESSIONID=nj1tvkclp3jh83olcn3191sjq3(java服务器)信息,此信息是服务器随机生成的,放在服务器内存里,为了标识唯一的客户端用户,内容不会重复,这就是sessionid.

  当浏览器得到这个sessionid会将它放在自己的进程内存里,这里不同的浏览器会有所不同,IE进程间不能共享这个sessionid,也就是新开一个IE将不能共享这个sessionid;而Firefox进程间可以共享.然后你继续发请求给这个网站的时候,浏览器就会把这个sessionid放在请求头里发送给该服务器了,这样服务器得到sessionid后再和自己内存里存放的sessionid对比锁定客户端,从而区分不同客户端,完成会话.

  可以看出如果用这种方式,当用户在会话的过程中关闭浏览器结束进程,则这个sessionid将消失,如果用户又打开浏览器想继续这次会话的时候,就会因为发送的请求中没有这个sessionid而使服务器无法辨别该把那个session信息给他,注意(这个时候服务器端的sessionid和sessionid所指向的session都还存在,只是没有正确的sessionid和它匹配而占用服务器内存,只有session过期或服务器重启才释放内存).

  上面这种方式叫会话cookie,把cookie放在浏览器内存里,只能在这个浏览器的内存范围里完成会话,是一种不长久的方式,为了能长久会话,就出现了持久化cookie,把cookie固化在用户的计算机上,现在的cookie不单单能存放sessionid,还能放用户信息,样式表信息等.

  如果用户禁止了所有cookie的使用,那么会话cookie和持久化cookie都不能用了,有个方案也可以解决问题,就是URL重写,这里要说下的就是URL重写只能实现会话cookie的效果,持久会话实现不了. 

原来是这样,怪不得有些网站关闭浏览器就要重新登录了

http://bbs.csdn.net/topics/390796397 这个帖子也讨论了关于session的问题 ,我不太明白 

怎么让用户一直操作的情况下,定时的让session失效,达到重新验证用户的效果。依靠数据库吗?

楼主说了服务器端,二楼说了客户端,都不错。

对于服务器端,session可以几种实现,可以放在内存里,可以存在文件里,甚至可以存在数据库里(这样session就可以永久保持不担心丢失)。对于客户端,session一般通过cookie保持,这样就能实现自动登录。

我这里关于服务器重启会不会导致session失效有一些不一样的看法,在停止服务器是,session会序列化,发生钝化现象,进而存储在硬盘上,而当服务器重启时,又会把session加载进内存中,从而活化。因此在服务器停止,重启时,若你的浏览器未关,你仍然在登录状态

相关阅读

如何在JSP中清空Session中的值?

session.invalidate(); 是把session内的所有属性 都清除,session.removeAttribute("uiUsers");是清除session中的 "uiUsers" 属性,就

tf.train.MonitoredSession 简介

在run过程中的集成一些操作,比如输出log,保存,summary 等 基类一般用在infer阶段,训练阶段使用它的子类 tf.train.MonitoredTrainin

session个某个属性多次赋值

request.getSession().setAttribute("startPage", "1");request.getSession().setAttribute("startPage", "2");request.getSessi

php7 Session_start()函数的变化-------每天进步一点

php7以前,我们使用session前都是要先代用session_strat()函数来初始化的,但这个函数是没有参数可以传的,session的配置都在php.ini文

${sessionScope.user}的使用方法

EL 全名为Expression LanguageEL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构:${sessionScope.user.s

分享到:

栏目导航

推荐阅读

热门阅读