2012-08-16 41 views
2

我想知道什么是最好的(例如最高效,普遍接受的行业标准)方法来处理潜在的会话过期,当您定期使用存储在其中的值时你的代码。正确处理潜在会话到期的方法

例如,我经常使用(在C#)类似于以下行:

Guid personGuid = (Guid)Session[SSPersonGuid]; 

我在Page_Load中检查值是否为空,并相应处理,但会议可能会在此人到期在页面上,在这种情况下,当他们点击页面上的一个按钮时,我们需要使用类似上面的内容,会有NullReferenceException。

是处理最好的办法只是这样每次使用之前检查空:

if (Session[SSPersonGuid] == null) {...} 

还是有某种我不知道特别的东西?

回答

1

什么是最好的(例如最高效的,普遍接受的,行业标准的 )处理会话潜在到期的方法?

最好的是,他们不会过期设置a Out-Of-Process session state serverout-of-process SQL Server

你也可以检测它在The Session_OnEnd Event

编辑:http://www.codinghorror.com/blog/2008/04/your-session-has-timed-out.html

我淹没在每天的会话超时消息:

东西杰夫·阿特伍德说,在这里与斯科特的答案对应来自各种源,但我从来没有见过从例如 gmail的会话过期消息。这里是我的建议:

  1. 在发送 定期心跳到服务器的浏览器创建一个后台的JavaScript程序。重新生成一个新的cookie,定时 到期,比如每5分钟或10分钟。

  2. 如果您担心 会话劫持 - 而且您确实应该 - 使用受HTTPS保护的 连接。对于任何类型的金融机构 来说,这绝对是不容小觑的。

+0

与StateServer和sql服务器方法,会话仍然可以超时虽然他们在页面上虽然他们不能? – standgale 2012-08-16 04:22:42

+0

看我的编辑。关于在进程外存储时丢失会话,可能会发生如果StateServer进程重新启动或重新启动服务器......可能会发生个人从未见过或经历过进程外会话超时的情况。 – 2012-08-16 04:44:29

+0

我要么做错了事,要么根本不明白它应该如何工作。我试着通过设置2分钟的超时时间来测试它,看它是否仍然超时,并且在两分钟后仍然有效。根据我的理解,数据(例如SSPersonGuid)应该仍然可用。或者我不应该设置超时时间,并且永远不会超时。或者,我还需要做些其他事情才能切换到StateServer模式(所需的服务正在运行,也就是说我需要重新启动某些设备才能识别设置)。谢谢你的方式。 – standgale 2012-08-17 01:37:50

0

我看到的很多是与包括检查是否会话即将到期的定时器每个页面加载的JavaScript。如果是这样(例如在2分钟内),则显示一个弹出窗口,告诉用户会话即将到期,并询问用户是否要继续。然后脚本可以向服务器发回AJAX呼叫以保持会话的活跃。

但是,这不会阻止用户关闭JavaScript的问题。

+0

当IIS回收wpw3进程时,这是如何工作的?如果您不知道IIS何时要回收该过程,您怎么知道会话将会过期?我很想看到代码。 – 2012-08-16 03:13:10

+0

在大多数情况下,但并非所有情况下,都可以禁用回收。 http://stackoverflow.com/questions/3156925/stop-iis-7-5-application-pool-recycling – 2012-08-16 03:19:55