【问题标题】:Forms Authentication Timeout Logging表单身份验证超时日志记录
【发布时间】:2011-12-09 11:35:05
【问题描述】:

我想检测 asp.net 表单身份验证票证何时过期。然后,我想将由于不活动而退出的用户登录到服务器。当身份验证票过期时,服务器上是否会触发事件?

<sessionState mode="InProc" timeout="5"></sessionState>
<authentication mode="Forms">
  <forms loginUrl="~/Home/AccessDenied" timeout="5" />
</authentication>

在全局 asax 文件中,我尝试了 Session_OnEnd()。但是 context.user 对象为空。当我调用membership.getuser() 它也返回null。我曾尝试在身份验证之前使会话超时,但这无济于事。我正在使用 mvc3 和 ii7.5。

【问题讨论】:

  • 我在客户端添加了一个计时器。它会弹出一个通知,告诉用户他们已经不活动一段时间了。如果他们想扩展他们的会话,那么我会向服务器发送一个 ajax 帖子并更新 Membership User 对象。这扩展了他们的表单身份验证会话。我愿意接受其他建议
  • 您可以结合使用此方法来确定超时,方法是读取票证并将该值添加到进入页面的 javascript。

标签: asp.net asp.net-mvc session session-timeout form-authentication


【解决方案1】:

会话和表单身份验证有两个完全独立的超时。 在这里查看我的帖子:

How can I handle forms authentication timeout exceptions in ASP.NET?

在 Application_PreRequestHandlerExecute 中你需要检查票证。

还要确保您的会话和表单身份验证超时使用我在此处发布的代码同步。不只是将两者都设置为 60 分钟。由于表单身份验证在一半时间过去之前不会更新“接触”时间,并且每次请求都会更新会话时间,因此它们不同步。

【讨论】:

  • 感谢您的回复。我试图找出表单身份验证票何时到期。如果他们单击另一个页面,您的解决方案将起作用。但是如果他们关闭浏览器,我不知道表单身份验证票何时到期。
  • 你不会的。票不在服务器上。服务器对票据一无所知。它完全控制在客户端,这就是一年前这些被 POET 漏洞攻击的原因。仅当您通过请求(或请求中缺少请求)将其发送到服务器时才会检查它
  • 正如亚当所说,这是不可能的。为了解决这个问题,我使用 Jquery 在用户停止与网站交互时进行倒计时。然后,一旦他们的会话即将到期,我就会弹出一个对话框。如果他们单击“扩展”,那么我向服务器发送了 AJAX 调用。调用 member.updateuser 的调用延长了表单身份验证票的超时时间。
猜你喜欢
  • 2021-07-31
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多