0

В форме входа у меня есть возможность разрешить пользователю щелкнуть меня помнить, который создает новый FormsAuthenticationTicket, который затем добавляется в файл cookie.ASP.MVC Запомнить меня cookie не работает после окончания сеанса

if (_model.RememberMe) 
{ 

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, 
             _model.Username, 
             DateTime.Now, 
             DateTime.Now.AddDays(30), 
             true, 
             _model.Username, 
             FormsAuthentication.FormsCookiePath); 

    // Encrypt the ticket. 
    string encTicket = FormsAuthentication.Encrypt(ticket); 

    // Create the cookie. 
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 

Следует надеяться, что в браузере клиентов должно быть 30 дней, как указано выше.

Тестирования это, я намеренно оставил текущий тайм-аут сеанса только через минуту

<sessionState timeout="1"></sessionState> 

Так через минуту, если пользователь сказал «запомнить меня» Я ожидаю, что сайт не должен быть перенаправлен обратно на страницу входа. Однако это так. Это код, который это делает.

 // [".ASPXAUTH"] is the cookie name that is created by the FormsAuthenticationTicket` 
     if (User.Identity.Name == "" && Request.Cookies[".ASPXAUTH"] == null) 
     { 

      return RedirectToAction("LogOut", "Login"); 
     } 


     // the current session hasn't timed out or the remember me cookie is enabled 
     FormsIdentity id = (FormsIdentity)User.Identity; 
     FormsAuthenticationTicket ticket = id.Ticket; 

Но файл cookie NULL.

Я ожидаю, что это будет недоразумение от моего имени, поэтому, если кто-нибудь может дать мне руку. Я буду очень признателен.

Благодаря

+1

Почему вы делаете это вручную и не используете 'FormsAuthenticatio n.SignIn'? –

+0

Потому что я никогда не слышал об этом до сих пор lol – user3428422

+0

И с .NET 4.5 нет 'FormsAuthentication.SignIn', возможно, его устаревшего – user3428422

ответ

0

Что вы ищете

string mySessionCookie = System.Web.HttpContext.Current.Request.Headers["Cookie"]; 
if (mySessionCookie.IndexOf(".ASPXAUTH", StringComparison.Ordinal) >= 0) { 
    // do something 
} 

EDIT

Как об этом, я не проверял, но я помню, что-то делать, как это раньше

HttpCookie cookie = (HttpCookie)(Request.Cookies[FormsAuthentication.FormsCookieName]); 
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value); 
+0

Спасибо, что работает, однако я не могу получить доступ к имени пользователя из файла cookie таким образом – user3428422

+0

Я предложил другой подход, однако должен сказать, что Request.Cookies [". ASPXAUTH"] работает для меня , –

+0

@ user3428422 Если бы это ответили на ваш вопрос, можете ли вы пометить его как ответ. Спасибо. –

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