Cookie
165ASP.NET --- Основы ASP.NET --- Cookie
Специальные cookie-наборы — это еще один способ сохранения информации для последующего использования. Cookie-наборы представляют собой небольшие файлы, которые создаются на жестком диске клиента (или, если они являются временными, то в памяти веб-браузера). Одно из преимуществ cookie-наборов состоит в том, что они работают прозрачно, и пользователь даже не подозревает о том, что должна быть сохранена какая-то информация.
Они также могут применяться любой страницей в приложении и сохраняться между посещениями, что подразумевает действительно долгосрочное хранение. Они обладают некоторыми недостатками, которые присущи строкам запросов. В частности, они могут хранить только простую строковую информацию, и пользователь очень легко может получить к ним доступ и просмотреть их, отыскав и открыв соответствующий файл. Эти факторы делают их неподходящим вариантом, когда требуется сохранить сложную или секретную информацию либо просто большой объем данных.
Некоторые пользователи отключают cookie-наборы в своих браузерах, что приводит к появлению проблем при работе с веб-приложениями, которые требуют их. Однако в целом cookie-наборы являются распространенным явлением, т.к. применяются на очень многих сайтах.
Cookie-наборы просты в использовании. Оба объекта Request и Response (доступные через свойства объекта Page) предоставляют коллекцию Cookies. Важно запомнить, что извлекать cookie-наборы следует из объекта Request, а устанавливать — через объект Response.
Чтобы установить cookie-набор, просто создайте новый объект System.Web.HttpCookie. Затем заполните его строковой информацией (используя уже знакомый шаблон словаря) и присоедините его к текущему веб-ответу, как показано ниже:
// Создать объект cookie-набора
HttpCookie cookie = new HttpCookie("My localhost cookie");
// Установить значения в нем
cookie["Language"] = "Russian";
cookie["Country"] = "ru-ru";
// Добавить куки в ответ
Response.Cookies.Add(cookie);
Cookie-набор, добавленный таким способом, будет сохраняться до тех пор, пока пользователь не закроет окно браузера, и отправляться вместе с каждым запросом. Чтобы создать cookie-набор с более долгим сроком существования (который сохраняется вместе с временными файлами Интернета на жестком диске пользователя), установите для него дату истечения срока действия, как показано ниже:
// Этот cookie-набор будет оставаться
// действительным в течение одного года
cookie.Expires = DateTime.Now.AddYears(1);
Теперь можно увидеть информацию о добавленном cookie-наборе в браузере:
Извлекаются cookie-наборы по именам с помощью коллекции Request.Cookies:
HttpCookie cookieReq = Request.Cookies["My localhost cookie"];
// Проверить, удалось ли обнаружить cookie-набор с таким именем.
// Это хорошая мера предосторожности, потому что
// пользователь мог отключить поддержку cookie-наборов,
// в случае чего cookie-набор не существует
string language;
if (cookieReq != null)
{
language = cookieReq["Language"];
}
Единственный способ удалить cookie-набор — заменить его cookie-набором с истекшим сроком хранения. В следующем фрагменте кода показано, как это делать:
HttpCookie cookie = new HttpCookie("My localhost cookie");
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
Вы заметите, что некоторые другие средства ASP.NET тоже используют cookie-наборы. Двумя примерами могут служить состояние сеанса (которое позволяет временно сохранять специфическую информацию о пользователе в памяти сервера) и безопасность с помощью форм (она дает возможность ограничить доступ к определенным разделам веб-сайта, заставляя пользователей получать к ним доступ через страницу входа).