【问题标题】:how to detect authentication timeout from client script如何从客户端脚本检测身份验证超时
【发布时间】:2012-06-25 12:22:30
【问题描述】:

我有一个使用表单身份验证的 ASP.NET 应用程序,超时设置为五分钟。在我的页面上,我有一个按钮,当单击该按钮时,会对位于我的 .svc 文件中命名的服务上的操作进行 AJAX 调用。我如何从客户端 javascipt 知道应用程序已超时?或者,我如何在 global.asax 中检测到这一点;也许在 application_beginrequest 中?

【问题讨论】:

    标签: javascript asp.net forms-authentication wcf-client


    【解决方案1】:

    如果您在谈论会话超时。发生这种情况时,IHttpSessionState.IsNewSession 属性应设置为 true。

    如果您指的是身份验证超时,那么您必须检查 AuthenticationTicket 是否过期。

    【讨论】:

    • 这意味着您需要在用户登录时显式创建一个 AuthenticationTicket,而不是指望 .Net 在未提供时创建的一个。届时您将命名票证,因此您应该能够在 javascript 中获取 cookie。
    • @TheGeekYouNeed 但是,如果您按照 cookie 上的 recommended security guidelines and set HttpOnly,您将无法通过客户端脚本访问它们。
    【解决方案2】:

    您的方法的一个变体:有一个单独的客户端脚本,首先通过请求一个特殊的页面/处理程序来检查身份验证过期,该页面/处理程序返回 JSON 结构以指示当前用户的身份验证状态。只有在知道用户仍然处于活动状态之后,您才会运行您的主要 ajax 操作。这是另一个请求,但可以防止您将超时逻辑与主要的 ajax 逻辑纠缠在一起。您也可以在“警告,您的会话将在 x 分钟后超时”弹出窗口中单独使用。

    请参阅this questionmy answer 以了解有关如何设置它的更多详细信息,但关键是如果您不希望 check 过期以延长滑动过期您必须将过期页面/处理程序配置为单独的虚拟目录,并使用slidingExpiration=false 设置表单身份验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      相关资源
      最近更新 更多