处理潜在会话到期的正确方法

时间:2012-08-16 03:01:03

标签: c# asp.net

我想知道当您经常使用代码中存储的值时,处理会话可能过期的最佳方法(例如,最有效,最普遍接受的行业标准)是什么。

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

Guid personGuid = (Guid)Session[SSPersonGuid];

我在Page_Load中检查值是否为null并相应地进行处理,但是当人在页面上时,会话可能会过期,在这种情况下,当他们单击页面上的按钮时,我们需要使用类似于上面会有一个NullReferenceException。

处理此问题的最佳方法是在每次使用之前检查null,如下所示:

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

还是有一些我不知道的特殊事情?

2 个答案:

答案 0 :(得分:1)

  

什么是最好的(例如最有效,最普遍接受的行业)   标准)处理会话可能到期的方式?

最好的方法是设置a Out-Of-Process session state serverout-of-process SQL Server它们不会过期。

您也可以在The Session_OnEnd Event

中检测到它

修改

Jeff Atwood在这里说的东西与Scotts答案相符:http://www.codinghorror.com/blog/2008/04/your-session-has-timed-out.html

  

我每天都会被各种各样的会话超时消息所淹没   消息来源,但我从来没有见过会话到期消息   例如,gmail。这就是我的建议:

     
      
  1. 在发送的浏览器中创建后台JavaScript进程   定期检测到服务器的心跳。使用timed重新生成新cookie   比如,每5或10分钟到期。

  2.   
  3. 如果你担心的话   会话劫持 - 你真的应该 - 使用HTTPS保护   连接。对于金融机构来说,这绝对是明智的选择   任何形式的。

  4.   

答案 1 :(得分:0)

我看到的很多是每个页面加载的JavaScript,其中包含一个计时器,用于检查会话是否即将过期。如果是这样(例如,在2分钟内),则显示弹出窗口,告知用户会话将要过期,并询问用户是否要继续。然后,该脚本可以向服务器发出AJAX调用,以使会话保持活动状态。

然而,这不会阻止用户关闭JavaScript的问题。