【问题标题】:Forms authentication after a user session has expired用户会话过期后的表单身份验证
【发布时间】:2012-07-27 20:21:23
【问题描述】:

我在 jQueryUI 对话框中有一个 asp 登录控件,该控件在用户会话接近或已经过期之前一直隐藏。我正在从客户端脚本读取 aspxauth cookie 中的自定义字段以显示“扩展会话”消息,如果用户单击该消息,则会向服务器发送异步 XHR,该服务器返回具有更新值的 cookie。所有这些工作正常。当用户没有响应“延长会话”消息并且他们的会话过期时,我的问题就出现了。然后他们会看到带有登录控件的 jQuery 对话框,该对话框应该允许他们进行身份验证,而无需将他们带到默认登录页面。当用户通过登录控件提交他们的凭据时,会将他们带到默认登录页面并且不对他们进行身份验证。做什么?

  • 我没有使用 ASP.NET AJAX
  • 我已经在 Global.asax 中实现了 FormsAuthentication_OnAuthenticate 事件,所以如果有帮助的话,我确实可以访问那里的 FormsAuthenticationEventArgs 对象。

【问题讨论】:

    标签: c# asp.net .net login


    【解决方案1】:

    您需要在延长会话的同时延长 FormsAuthentication 超时时间。

    这是我使用的东西

        public void Extend(int SessionLimit)
        {
            FormsAuthenticationTicket OriginalTicket = ((FormsIdentity)Context.User.Identity).Ticket;
            FormsAuthenticationTicket NewTicket = new FormsAuthenticationTicket(1, OriginalTicket.Name, DateTime.Now, DateTime.Now.AddMinutes(SessionLimit), false, OriginalTicket.UserData);
            HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(NewTicket));
            authCookie.HttpOnly = true;
            HttpContext.Current.Response.Cookies.Add(authCookie);
        }
    

    【讨论】:

    • 我将把这个标记为答案,因为它确实解决了我在实现此功能时遇到的另一个问题,即在异步 XHR 请求中返回一个新的 aspxauth cookie。
    • 但是,在我最初的问题中,我试图处理一个会话已经过期的用户,因此必须再次进行身份验证,但这样做不会被重定向到默认登录页面。我最终在这里认输,只是将过期用户发送到我们的主页,并附加一个查询字符串,告诉脚本抛出登录对话框并显示会话超时消息。
    • 如果会话/表单超时,即使我在重定向之前发现它,我也无法避免进入登录页面。所以这就是我所做的,因为我也认输了:)
    【解决方案2】:

    我们没有与您完全相同的设置,我不确定您的重新身份验证是如何工作的,所以我可能会偏离基础,但我们遇到了一个非常相似的问题。

    我们遇到的问题是我们用于重新登录身份验证的页面处于身份验证控制之下(即要访问它,您必须先登录)。

    解决方案是在 web.config 中添加一个条目以“取消保护”该页面。例如,我们在主配置元素中添加了以下内容:

      <location path="loginreauth.aspx">
        <system.web>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>
    

    一旦我们这样做了,一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 2016-03-19
      • 2020-03-09
      相关资源
      最近更新 更多