session 失效
以前发了一个帖子,觉得好奇很多人竟然认为关闭浏览器session就失效了 或者认为session失效和关闭浏览器有关系
很多评论 让我很诧异啊
这边统一回复一下吧
可以肯定的说session失效和浏览器是没有任何关系的
session本身有一个存活时间,在tomcat中默认的是30分钟,
和浏览器是没有关系的
因为即使你浏览器一直开着,如果在30分钟内没有发出任何请求,
那你原来存在服务器上的session域内的东西就全没有了,
你再次访问的时候,服务器会新建一个session的。
通过session的ID来判断是不是新的session
session时间的改变是通过session.getMaxInactiveInterval()改变的
session 失效除了上述的超时
或者服务器重启或者中断
所以如果当你设置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加载进内存中,从而活化。因此在服务器停止,重启时,若你的浏览器未关,你仍然在登录状态
相关阅读
session.invalidate(); 是把session内的所有属性 都清除,session.removeAttribute("uiUsers");是清除session中的 "uiUsers" 属性,就
在run过程中的集成一些操作,比如输出log,保存,summary 等 基类一般用在infer阶段,训练阶段使用它的子类 tf.train.MonitoredTrainin
request.getSession().setAttribute("startPage", "1");request.getSession().setAttribute("startPage", "2");request.getSessi
php7 Session_start()函数的变化-------每天进步一点
php7以前,我们使用session前都是要先代用session_strat()函数来初始化的,但这个函数是没有参数可以传的,session的配置都在php.ini文
EL 全名为Expression LanguageEL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构:${sessionScope.user.s