MSDN говорит:
Событие LoggedIn возникает после того, как поставщик проверки подлинности проверяет учетные данные пользователя, и файл cookie проверки подлинности помещается в очередь для отправки в браузер в следующем ответе. Используйте событие LoggedIn, чтобы обеспечить дополнительную обработку, например доступ к данным пользователя, после аутентификации пользователя.
Таким образом, это событие кажется подходящим местом для замены файлов cookie. Во-первых, файл cookie необходимо получить и расшифровать:
HttpCookie authCookie = Response.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket oldAuthTicket =
FormsAuthentication.Decrypt(authCookie.Value);
сразу после этого должен быть создан новый билет аутентификации на основе только что извлеченного:
FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(
oldAuthTicket.Version,
oldAuthTicket.Name,
DateTime.Now,
DateTime.Now.Add(timeoutForUser),
oldAuthTicket.IsPersistent,
oldAuthTicket.UserData,
FormsAuthentication.FormsCookiePath
);
timeoutForUser
здесь значение TimeSpan
, которое содержит время ожидания сеанса для пользователя.
И, наконец, старый cookie в ответе нужно заменить на новый:
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
HttpContext.Current.Response.Cookies.Set(authCookie);
Это должно сработать.
person
Alex
schedule
11.03.2011