我错过了什么?我的表单超时不会超时

时间:2011-06-18 20:46:16

标签: c# asp.net-mvc-3 authentication web-config

我有一个asp.net mvc 3网站,它有我自己的authorize属性。当用户登录时,我创建一个表单Auth cookie

 public void SetAuthCookie(string userName, string userData = "",int version = 1)
    {
        DateTime expiry = DateTime.UtcNow.AddMinutes(30);

        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(version, userName, DateTime.UtcNow, expiry, false, userData, "/");

        string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

        HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) {Path = "/"};

        HttpContext.Current.Response.Cookies.Add(authCookie);
    }

// AuthorizeAttribute

public class MyAuthorizeAttribute : AuthorizeAttribute
{

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
       if (httpContext == null)
        {
            throw new ArgumentNullException("httpContext");
        }


       if (httpContext.User.Identity.IsAuthenticated)
       {
          return true;
       }

        return false;
    }

所以我去我的网站登录并等待我的网站超时。然后我做了一个请求(这是一个ajax请求),它首先通过我的属性,httpContext.User.Identity.IsAuthenticated仍然设置为true,即使我没有向服务器请求3分钟

  <authentication mode="Forms">
      <forms loginUrl="~/Account"
                      protection="All"
                      name=".MySite"
                      path="/"
                      requireSSL="false"
                      slidingExpiration="true"
                      defaultUrl="default.aspx"
                      cookieless="UseDeviceProfile"
                      enableCrossAppRedirects="false"
                       timeout="1"
                       />
    </authentication>

2 个答案:

答案 0 :(得分:3)

您正在创建一个30分钟超时的cookie:

DateTime expiry = DateTime.UtcNow.AddMinutes(30);

所以你必须等30分钟才能使这个cookie失效。您在web.config中指定的超时1分钟将被忽略,因为您手动创建了30分钟超时的cookie。

如果要匹配web.config中的值,可以使用以下命令:

DateTime expiry = DateTime.UtcNow.AddMinutes(FormsAuthentication.Timeout);

答案 1 :(得分:0)

我同意上述答案

了解详情http://weblogs.asp.net/owscott/archive/2006/07/15/Forms-Authentication-Timeout.aspx

这可能会对你有所帮助