Что мне не хватает? Время ожидания моей формы не истечет - PullRequest
0 голосов
/ 19 июня 2011

У меня есть сайт asp.net mvc 3 с моим собственным атрибутом авторизации. Когда пользователь входит в систему, я создаю форму 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 ]

3 голосов
/ 19 июня 2011

Вы создаете файл cookie с тайм-аутом 30 минут:

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

Таким образом, необходимо подождать 30 минут, прежде чем этот файл cookie станет недействительным.Тайм-аут в 1 минуту, который вы указали в файле web.config, игнорируется, поскольку вы вручную создаете cookie с интервалом в 30 минут.

Если вы хотите сопоставить значение из вашего файла web.config, вы можете использоватьследующее:

DateTime expiry = DateTime.UtcNow.AddMinutes(FormsAuthentication.Timeout);
0 голосов
/ 26 апреля 2013

Я согласен с ответом выше

для более детального просмотра http://weblogs.asp.net/owscott/archive/2006/07/15/Forms-Authentication-Timeout.aspx

это может вам помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...