2

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

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

Guid personGuid = (Guid)Session[SSPersonGuid];

我正在检查 Page_Load 的值是否为空并进行相应处理,但是会话可能会在该人在页面上时过期,在这种情况下,当他们单击页面上的按钮时,我们需要使用类似上面的东西,那里将是 NullReferenceException。

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

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

还是有什么我不知道的特殊情况?

4

2 回答 2

1

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

最好的办法是它们不会通过设置进程外会话状态服务器进程外 SQL Server 来过期

您也可以在Session_OnEnd 事件中检测到它

编辑:

杰夫阿特伍德在这里所说的与斯科茨的回答相对应:http: //www.codinghorror.com/blog/2008/04/your-session-has-timed-out.html

我每天都会收到来自各种来源的会话超时消息,但我从未见过来自 gmail 的会话过期消息。这是我的建议:

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

  2. 如果你担心会话劫持——你真的应该——使用受 HTTPS 保护的连接。对于任何类型的金融机构来说,这绝对是一件轻而易举的事。

于 2012-08-16T03:09:49.837 回答
0

我经常看到的是每个页面加载的 JavaScript,其中包含一个计时器,用于检查会话是否即将到期。如果是这样(比如说,在 2 分钟内),显示一个弹出窗口,告诉用户会话即将到期,并询问用户是否要继续。然后,该脚本可以对服务器进行 AJAX 回调以保持会话处于活动状态。

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

于 2012-08-16T03:11:42.310 回答