Cookies в ASP.NET или как хранить небольшую информацию на стороне клиента

Просто о NET | создано: 02.12.2010 | опубликовано: 22.04.2014 | обновлено: 13.01.2024 | просмотров: 24856 | всего комментариев: 2

Cookie — это один из нескольких способов хранения некоторой информации о пользователе сайта в то время когда пользователь не находится на сайте. Cookie обычно используются для сохранения информации о пользователе между его визитами на сайт. Cookie — это небольшой текстовой файл отправленный сервером (сайтом) и сохраненный броузером на компьютере клиента (пользователя).

Что такое Cookie?

Cookie — это один из нескольких способов хранения некторой информации о пользователе сайта в то время когда пользователь не находится на сайте. Cookie обычно используются для сохранения информации о пользователе между его визитами на сайт. Cookie — это небольшой текствой файл отправленый сервером (сайтом) и сохраненный броузером на компьютере клиента (пользователя). Например, когда пользователь приходит к Вам на сайт, то Вы можете сохранить информации о его последнем визите, а при следующем посещении, можно с лугкостью прочитать эту информацию и показать пользователю, когда он был на сайте в последний раз.


Как создать Cookie в ASP.NET

[VB.NET]
 

' добавляем это в начало файла .vb кода
Imports System.Web

' создаем cookie
Response.Cookies(«MyCookieName»).Value = «MyCookieValue»

' задаем срок истечения срока действия cookie
Response.Cookies(«MyCookieName»).Expires = Now.AddDays(1)

' задаем значения ключ/значение (key/value) в один cookie
Response.Cookies(«VisitorData»)(«FirstName») = «Richard»
Response.Cookies(«VisitorData»)(«LastVisit») = Now.ToString()


[ C# ]

// добавляем это в начало файла .cs кода
using System;

// создаем cookie
Response.Cookies[«MyCookieName»].Value = «MyCookieValue»;

// задаем срок истечения срока действия cookie
Response.Cookies[«MyCookieName»].Expires = DateTime.Now.AddDays(1);

// задаем значения ключ/значение (key/value) в один cookie

Response.Cookies[«VisitorData»][«FirstName»] = «Richard";
Response.Cookies[«VisitorData»][«LastVisit»] = DateTime.Now.ToString();


Как прочитать значения из Cookie

Для чтения cookie используем следующий код:

[ VB.NET ]

Dim MyCookieValue As String
' сначала нам требуется проверить на null наличие cookie
If Not Request.Cookies(«MyCookieName») Is Nothing Then
    MyCookieValue = Request.Cookies(«MyCookieName»).Value
End If

[ C# ]

string MyCookieValue;
// сначала нам требуется проверить на null наличие cookie
if(Request.Cookies[«MyCookieName»] != null)
    MyCookieValue = Request.Cookies[«MyCookieName»].Value;

Как удалить Cookie

Для удаления существующего cookie обычно задается прошедшая дата в срок истечения  (expire). это можно сделать так:

[ VB.NET ]

' проверка на существование cookie
If Not Request.Cookies(«MyCookieName») Is Nothing Then
    ' установка срока
    Response.Cookies(«MyCookieName»).Expires = Now.AddDays(-1)
End If

[ C# ]

// проверка на существование cookie
if (Request.Cookies[«MyCookieName»] != null)
{
    // установка срока
    Response.Cookies[«MyCookieName»].Expires = DateTime.Now.AddDays(-1);
}

Класс HttpCookie

Класс HttpCookie находит в пространстве имен System.Web. Вы можете использовать HttpCookie для манипулирования cookies вместо объектов Response и Request.

HttpCookie имеет следующие свойства:

- Domain - Получает или устанавливает имя домена ассоциированного с кукисом.
- Expires - Получает или устанавливает время истечения действия кукиса. По истечению данной даты броузер удаляет этот кукис. Максимальный срок «жизни» кукиса составляет 365 дней, но Вы можете изменить (например, увеличить) этот срок при каждом посещении Вашего сайта пользователем. Но если пользователь не заходил к Вам на сайт более чем 365 дней, то кукис будет удален броузером.
- HasKeys - Возвращает true если кукис содержит пары (ключ/значение). Кукисы не ограничены на содержания простой информации типа strings, и могут содержать и пары (ключ/значение).
- HttpOnly - Получает или устанавливает true/false значения если кукис доступен на стороне клиента при помощи javascript. Если значение true, кукис будет доступен только серверному коду.
- Item - Не обязательное свойство, оно присутствет только когда используется старая версия класического ASP.
- Name - Имя кукиса.
- Path - Так же как и свойство Domain, это свойства используется для ограничения пространства действия кукиса по специальному URL. Например, для ограничения использования кукиса в подпапке www.yourdomain.com/forum Вам необходимо установить свойство Path равным "/forum».
- Secure - Будет ли кукис передаваться через протокол HTTPS с использованием SSL (secure socket layer) соединения.
- Value - Получает или устанавливает значение кукиса.
- Values - Используеся для получения или устанавки значений пар (ключ/значение) в индивидуальном кукисе.

Вы можете использовать класс HttpCookie для создания кукиса таким образом:

[ VB.NET ]

Dim MyGreatCookie As HttpCookie = New HttpCookie(«MyCookieName»)
MyGreatCookie.Value = «Some cookie value»
MyGreatCookie.Expires = Now.AddDays(100)
Response.Cookies.Add(MyGreatCookie)


[ C# ]

HttpCookie MyGreatCookie = new HttpCookie(«MyCookieName»);
MyGreatCookie.Value = «Some cookie value»;
MyGreatCookie.Expires = DateTime.Now.AddDays(100);
Response.Cookies.Add(MyGreatCookie);

Ограничение броузеров на использования cookies.

Мааксимальный размер файла кукиса может быть 4096 байт. Это не много, но в принципе достаточно чтобы хранить полезную информацию, в частности ID пользователя. Также ограничего и количество файлов кукисов. Их может быть не более 20 на одни web-сайт. Если вы создадите новый 21-ый кукис, то броузер удалит самый старый кукис из уже существующих.

Посетитель сайта может устновить в своём броузере «не использовать cookies». В этом случаи, Вы не сможете записать файл кукиса на компьютере пользователя, именно поэтому и следует проверять настройки броузера перед тем как записывать кукисы.

Если посетитель отключит использование кукисов, Вам потребуется решить, хотите ли записывать данные каким-нибудь другим способом (например, Session) или нет. Если использование кукисо необходимо для работы сайта, то пользователь должен получить сообщение о том, что ему необходимо включить использование кукисов.

Причины отсутствия поддержки броузером кукисов (cookies)

Существует две причины по которым клиентский компьютер не сможет принять кукисы:

- Web-броузер не поддерживает кукисы;
- Web-броузер поддерживает, но пользователь отключил их использование намеренно.

Как определить поддердивает ли броузер кукисы (cookies)

[ VB.NET ]

If Request.Browser.Cookies Then
    ' поддерживает
Else
    ' не поддерживает
End If


[ C# ]

if (Request.Browser.Cookies)
{
    // поддерживает
}
else
{
    // не поддерживает
}

Как определить, что броузер поддерживает кукисы, но пользователь отключил эту возможность

Если пользователь отключил использование кукисов в броузере, то выше указанный метод Request.Browser.Cookies при проверки всё равно вернет true, но кукисы не будут сохранены на компютере клиета. Один из способов проверки в данном случаи является попытка сохранить кукис на первой странице, а затем используя Response.Redirect перенаправить на другую страницу и прочитать записанный кукис.

Лучшая практика при использовании cookies в ASP.NET

Кукисы — это простой текст, и поэтому не используются для хранения важной информации такой как пароли без предварительно шифрации. Если Вы хотите использовать опцию «Запомнить меня», настоятельно рекомендую шифровать данные записанные в кукис. Кукисы обычно используются для хранения информации следующего типа: последняя дата визита пользователя, любимый цвет, возраст посетителя и т.д.

Вопросы безопастности при использовании Cookies в ASP.NET

По причине безопастности, Ваше приложение может читать кукисы только в пределах домена приложения. Вы не сможете прочитать кукисы с другого домена. Web-броузер хранит кукисы с разных сайтов (доменов) отдельно друг от друга. Кукисы — просто текст, который может с лёгкостью изменить как сам пользователь, так и «хакеры» пытаясь завладеть важной информацией. Короче, смотрите в оба! 

Поблагодарить

Хотите тоже получать донаты? Тогда заходите на boosty.to и регистрируйтесь!

Кстати, я использую хостинг reg.ru. Подключайся с промокодом 9A17-953A-8591-CF98.

Комментарии к статье (2)

Спасибо за статью! Просто так написано :)

// создаем cookie
Response.Cookies[«MyCookieName»].Value = «MyCookieValue»;

если кукиса MyCookieName нет, то получим исключение. так его не создать