1

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

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

2 回答 2

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);
    }
于 2012-07-27T23:11:28.313 回答
0

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

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

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

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

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

于 2012-07-27T22:44:49.543 回答