2014-11-21 2 views
0

Вот мое печенью создать код: Это контроллер (model.RememberMe этого значение флажка)запомнить меня (isPersistent) не работают по проверке подлинности форм

int timeout = (model.RememberMe) ? (int) FormsAuthentication.Timeout.TotalMinutes : Session.Timeout;//4h 
        HttpCookie cookie = accountService.GetCookie(userId, model.RememberMe, timeout); 
        Response.Cookies.Add(cookie); 
        Logger.Debug("POST: AccountController LogOn end."); 
        result = returnUrl != null 
         ? RedirectToLocal(returnUrl) 
         : RedirectToAction("Index", "Profile", new {id = userId}); 

Сервисного метода, который создаст печенье

public HttpCookie GetCookie(int userId, bool rememberMe, int timeout) 
     { 
      Logger.Trace("AccountService GetCookie start with arguments:" + 
         " userId = {0}, rememberMe = {1}.", userId, rememberMe); 
      var authTicket = new FormsAuthenticationTicket(
           1, 
           Convert.ToString(userId), 
           DateTime.Now, 
           DateTime.Now.AddMinutes(timeout), 
           rememberMe, 
           string.Empty, 
           "/" 
           ); 
      HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, 
       FormsAuthentication.Encrypt(authTicket)); 
      Logger.Debug("Cookie for user with userId = {0} has created", userId); 
      Logger.Trace("AccountService GetCookie end."); 
      return cookie; 
     } 

Но, к сожалению, помните, что функция не работает, а cookie истекает в конце сеанса браузера. Почему?

What is the purpose of FormsAuthenticationTicket isPersistent property? Вот какой-то ответ, но я не понимаю, почему он не работает?

ответ

0

Разница между кодом и так отвечать, что связано в том, что они используют:

FormsAuthentication.SetAuthCookie(model.UserName, true);

Что делает печенье с правильным временем истечения срока действия на основе IsPersistent собственности. Тем не менее, если вы возвращаете печенье с конструктором, как в вашем коде:

HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket));

Тогда время истечения будет установлен в браузере-сессии, потому что это поведение по умолчанию HttpCookie класса: what is the default expiration time of a cookie

Итак, у вас, вероятно, есть два варианта. Используйте FormsAuthentication.SetAuthCookie метод, описанный в ответ вы связаны, или добавить:

cookie.Expires = DateTime.Now.AddMinutes(10); // or whatever you want

Смежные вопросы