Cookie

165

Специальные 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

Извлекаются 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-наборы. Двумя примерами могут служить состояние сеанса (которое позволяет временно сохранять специфическую информацию о пользователе в памяти сервера) и безопасность с помощью форм (она дает возможность ограничить доступ к определенным разделам веб-сайта, заставляя пользователей получать к ним доступ через страницу входа).

Пройди тесты
Лучший чат для C# программистов