Для постоянного файла cookie установлено значение Session в asp.net mvc?
Я использую ASP.NET MVC и хочу иметь возможность автоматически входить в систему, когда они возвращаются на сайт (точно так же, как этот сайт).
Когда пользователь впервые регистрируется или входит в систему, я устанавливаю cookie следующим образом:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
"playerid",
DateTime.Now,
DateTime.Now.AddMinutes(1), //This will be set to a longer period in live...
true,
Username + "|" + item.PlayerID.ToString(),
FormsAuthentication.FormsCookiePath);
string encTicket = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
Если я проверю это, войдя в систему как пользователь, а затем посмотрите на Cookies
вкладка в Firebug
тогда срок действия установлен на Session
, Если я закрою браузер и затем вернусь на свой сайт, я больше не буду в системе. Это то, что я ожидаю, так как сеанс заканчивается, когда браузер закрывается (но это не то, чего я хочу!).
Однако, если я захожу на сайт и перемещаюсь по сайту, то через минуту истечение срока действия больше не отображается как Session
но отображается как фактическая отметка даты. Если я затем закрою браузер и вернусь на свой сайт, я автоматически войду в систему.
Таким образом, кажется, что мой срок действия установлен на Session
до фактической даты истечения срока действия я предусмотрел пропуски (в данном случае t + 1 мин), и я был активен на сайте (я использую скользящий срок действия).
Любые идеи, как я могу установить срок действия моего истечения на то, что я заявляю в билете FormsAuthentication (а не показывать как Session
)?
1 ответ
Вы должны создать persistent cookie
который хранится на жестком диске клиента, установив Expires
имущество:
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)
{
// setting the Expires property to the same value in the future
// as the forms authentication ticket validity
Expires = ticket.Expiration
};
Response.Cookies.Add(cookie);
Убедитесь, что вы указали один и тот же тайм-аут для файла cookie и билета проверки подлинности форм. Теперь, когда вы посмотрите на FireBug, вы увидите, что когда Expires
свойство устанавливается в будущем, что сделает куки постоянными и перезапустит браузер:
Set-Cookie: ASPXAUTH=...; Expires=Tue, 15-Jan-2014 21:47:38 GMT; Path=/; HttpOnly