В примерах показанных до сих пор, использовались непостоянные cookie-наборы аутентификации для поддержки мандатов аутентификации между запросами. Это значит, что если пользователь закрывал браузер, cookie-наборы немедленно удалялись. Этo разумный шаг для обеспечения безопасности. И особенно он важен на компьютерах общего пользования — дабы предотвратить использование следующим пользователем мандата, выданного предыдущему. Непостоянные сооkiе-наборы затрудняют и ограничивают возможности атак перехватом сеанса (когда злонамеренный пользователь получает доступ к сети и "заимствует" cookie-набор другого пользователя).
Но, несмотря на повышенный риск нарушения безопасности при использовании постоянных cookie-наборов аутентификации, в некоторых ситуациях их применение все же оправдано. Если выполняется аутентификация для целей персонализации, а не управления доступом к ограниченным ресурсам, вы можете решить воспользоваться преимуществами исключения регистрации при каждом визите пользователя, даже невзирая на повышенную опасность неавторизованного доступа.
Если вы решили применять постоянные cookie-наборы, реализовать их достаточно просто. Для этого нужно просто указать значение true вместо false в качестве второго параметра методов RedirectFromLoginPage() или SetAuthCookie() класса FormsAuthentication. Вот пример:
FormsAuthenticationRedirectFromLoginPage(UsernameTextBox.Text, true);
По умолчанию постоянные cооkiе-наборы не устаревают, если только не применяется метод FormsAuthentication.SignOut(). Их не касается установка атрибута timeout в элементе <forms> файла web.config. Если же вы хотите, чтобы постоянный cookie-набор в конечном итоге устарел когда-нибудь в будущем, то для этого нужно вызвать метод GetAuthCookie() класса FormsAuthentication, установить дату и время, когда соokie-набор должен стать недействительным, и включить его в ответ HTTP самостоятельно.
В следующем примере переписан код аутентификации пользователя при щелчке по кнопке Login (Вход). Он создает постоянный cookie-набор, но выполняет также дополнительные шаги, чтобы ограничить время его действия 10 днями:
protected void LoginAction_Click(object sender, EventArgs e)
{
Page.Validate();
if (!Page.IsValid) return;
if (FormsAuthentication.Authenticate(UsernameText.Text, PasswordText.Text))
{
// Создать cookie-набор аутентификации
HttpCookie AuthCookie;
AuthCookie = FormsAuthentication.GetAuthCookie(UsernameText.Text, true);
AuthCookie.Expires = DateTime.Now.AddDays(10);
// Добавить cookie-набор в ответ
Response.Cookies.Add(AuthCookie);
предыдущая следующая страница вначало главы оглавление
847