日期:2014-05-18  浏览次数:20442 次

可不可以设置session永不超时?如何设置那?
可不可以设置session永不超时?如何设置那?

------解决方案--------------------
设置web.config
<sessionState
mode= "InProc "
stateConnectionString= "tcpip=dbserver:42424 "
sqlConnectionString= "data source=dbserver;Trusted_Connection=yes "
cookieless= "false "
timeout= "20 "
/>
设置 timeout
------解决方案--------------------
保存在数据库中或者状态服务器中
------解决方案--------------------
为什么要这样做,那万一用户关掉浏览器怎么办?

这个是典型的内存泄露,那些已经关掉浏览器的session你要怎么清掉?

要知道,当用户再次打开浏览器时,就是一次新的会话,会用新的session(sessionid不同)而不是原来的,如果你不让过期,那么,你的内存里会存N多无用的session~~~~
------解决方案--------------------
保存到数据库 xml文件

不能用不超时
session在服务器上会丢失
------解决方案--------------------
ajax刷新session
------解决方案--------------------
用cookie代替session

session用不超时,应用迟早要崩溃
------解决方案--------------------
session永不超时设置-1就好

不过还有一个一定要保证,如果你的Session是放在SessionState里面的SessionState一定不能重启,重启就没了
如果放在IIS,那么IIS也不能回收,一回收也没了

所以想保证永不超时Session几乎无法办到,
所以还是cookie超时设置成-1比较好
------解决方案--------------------
且不说,即使设置 TimeOut = 无穷大,是否真的可以不超时,因为Session有时候会莫名其妙丢失,
Session 用不超时,应用迟早要崩溃!!

假如你希望,用户保持浏览器打开着,即使不做任何请求,Session 就保持不超时,那么使用
AJAX 或者隐藏的iframe 做一个定时请求(刷新),以告诉服务器,浏览器打开着,
------解决方案--------------------
MSDN 说拉 HttpSessionState.Timeout 属性不能设置为超过 525,600 分钟(1 年)的值。

------解决方案--------------------
数据库最保险