我想知道当您经常使用代码中存储的值时,处理会话可能过期的最佳方法(例如,最有效,最普遍接受的行业标准)是什么。
例如,我经常使用(在C#中)类似于以下内容的行:
Guid personGuid = (Guid)Session[SSPersonGuid];
我在Page_Load中检查值是否为null并相应地进行处理,但是当人在页面上时,会话可能会过期,在这种情况下,当他们单击页面上的按钮时,我们需要使用类似于上面会有一个NullReferenceException。
处理此问题的最佳方法是在每次使用之前检查null,如下所示:
if (Session[SSPersonGuid] == null) {...}
还是有一些我不知道的特殊事情?
答案 0 :(得分:1)
什么是最好的(例如最有效,最普遍接受的行业) 标准)处理会话可能到期的方式?
最好的方法是设置a Out-Of-Process session state server或out-of-process SQL Server它们不会过期。
中检测到它修改强>
Jeff Atwood在这里说的东西与Scotts答案相符:http://www.codinghorror.com/blog/2008/04/your-session-has-timed-out.html
我每天都会被各种各样的会话超时消息所淹没 消息来源,但我从来没有见过会话到期消息 例如,gmail。这就是我的建议:
在发送的浏览器中创建后台JavaScript进程 定期检测到服务器的心跳。使用timed重新生成新cookie 比如,每5或10分钟到期。
- 醇>
如果你担心的话 会话劫持 - 你真的应该 - 使用HTTPS保护 连接。对于金融机构来说,这绝对是明智的选择 任何形式的。
答案 1 :(得分:0)
我看到的很多是每个页面加载的JavaScript,其中包含一个计时器,用于检查会话是否即将过期。如果是这样(例如,在2分钟内),则显示弹出窗口,告知用户会话将要过期,并询问用户是否要继续。然后,该脚本可以向服务器发出AJAX调用,以使会话保持活动状态。
然而,这不会阻止用户关闭JavaScript的问题。