用户会话到期后进行表单身份验证

时间:2012-07-27 20:21:24

标签: c# asp.net .net login

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

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

2 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:0)

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

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

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

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

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