日期:2014-05-20  浏览次数:20556 次

关于Session过期的问题?
大家新年好:
        我是一个新手,请问Session什么情况会过期,
1。Session过期之后会自动消失吗?是不是就不占服务器的资源了?
2。当窗口关闭时,会话结束,Session会消失,那么想遨游等浏览器,他关闭的是一个标签,这样会话会不会结束,Session会不会消失,
3。定义Session过期时间是20分钟,请问这20分钟怎么算,是不动鼠标不动键盘20分钟,还是20分钟没有刷新页面,还是什么其它情况?
4。服务器一般能承受多少Session,当Session达到多少是会负载?

就是这四个问题,请大家帮帮我解释一下?谢谢了

------解决方案--------------------
Q1。Session过期之后会自动消失吗?是不是就不占服务器的资源了?

A:Session在超时之后过一段时间会自动消失。通常是在同一应用程序有某个客户访问服务器的时候,asp.net会检查所有Session是否超时,然后将超时的Session中保存的内容释放。因此,虽然这并不太重要,如果没有人访问服务器其实Session并不会消失,直到应用程序有任何人访问服务器。而且,大概是为了性能考虑,我印象中这个检测是在页面处理之后。因此,假设一个Session是20分钟过期,在接近25分钟之后才访问了一下,并且服务器上这段时间没有别的客户绘画访问过服务器,客户端应该依然可以得到Session没有过期的结果。但是紧接着下一次访问就会发现Session不在了。


Q2。当窗口关闭时,会话结束,Session会消失,那么想遨游等浏览器,他关闭的是一个标签,这样会话会不会结束,Session会不会消失,

A:窗口关闭时,Session并不会消失,因此会话并不会结束。服务器端一直保留着会话状态,直到超时。从客户端浏览器看,窗口关闭,确实新窗口一定会使用一个新的会话身份(SessionID)。对于遨游、ie7等标签方式下,通常(默认配置方式)所有tab使用同一会话身份,效果就好像一个页面中有多个Frame一样。有时候,这给页面上的处理设计带来了较高要求。你必须知道你的页面随时可能被同一会话中多页面并行访问,而这种tab方式的浏览器实际上大大增加了多个页面共享同一SessionID的机会。如果你的程序滥用了Session,就会在这类浏览器上更经常地发生由于没有考虑到并行性而各个页面实例不按(想当然的)设计次序胡乱刷新Session的情况。


Q3。定义Session过期时间是20分钟,请问这20分钟怎么算,是不动鼠标不动键盘20分钟,还是20分钟没有刷新页面,还是什么其它情况?
A: 会话中任何一个请求服务器的命令结束,都会重新计时。所以Ajax程序往往不用担心过期问题,因为它可以在不干扰客户端界面的情况下频繁访问服务器。至少你可以用一个定时器每隔1分钟才访问一下服务器,使用Ajax方式根本不会干扰用户操作界面。


Q4。服务器一般能承受多少Session,当Session达到多少是会负载?
A: 理论上应该超过20万个以上吧。具体数字大多时候已经没有意义了。服务器负载是CPU、内存等的使用,目前的硬件实际水平远远低于软件的限制。对内存的使用跟你的编成有关,也许,某个不太重要的程序不小心把几个DataSet放在Session中,就把整个服务器整个拖垮,所有程序都会被受牵连。可以给每一个程序单独启用一个虚拟机操作系统环境(分配固定的CPU时间、内存空间)。
------解决方案--------------------
真是详细的回答~~~
顺便恭喜我也答对了。