JavaScript и cookie (куки)

Как ни странно, статей, доступно освящающих эту тему, в рунете преступно мало. Восполню баланс.

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

JavaScript поддерживает встроенный объект с именем document.cookie для работы с куками. Этот объект хранит все куки, доступные для страницы, с которой запущен скрипт.

 

Создать куки с помощью яваскрипта можно так:

document.cookie = "name=значение; expires=дата; path=путь; domain=домен; secure";

 

Свойства описаны в таблице:

 

Свойство Описание
name=значение Устанавливает имя куки и его значение.
expires=дата Устанавливает дату истечения срока хранения куки. Дата должна быть представлена в формате, который возвращает методtoGMTString() объекта Date. Если значение expires не задано, куки будет удалено при закрытии браузера.
path=путь Данная опция устанавливает путь на сайте, в рамках которого действует куки. Получить значение куки могут только документы из указанного пути. Обычно данное свойство оставляют пустым, что означает что только документ установивший куки может получит доступ к нему.
domain=домен Данная опция устанавливает домен, в рамках которого действует куки. Получить значение куки могут только сайты из указанного домена. Обычно данное свойство оставляют пустым, что означает, что только домен установивший куки может получит доступ к нему.
secure Данная опция указывает браузеру, что для пересылки куки на сервер следует использовать SSL. Очень редко используется.

 

Для удобства использования, напишем 2 функции — получающую (get_cookie) и сохраняющую (set_cookie) куки.

 

Функция установки cookie

function set_cookie(name, value, expires)
{
if (!expires)
{
expires = new Date();
}
document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString() + "; path=/";
}

 

Функция получения cookie

function get_cookie(name)
{
cookie_name = name + "=";
cookie_length = document.cookie.length;
cookie_begin = 0;
while (cookie_begin < cookie_length)
{
value_begin = cookie_begin + cookie_name.length;
if (document.cookie.substring(cookie_begin, value_begin) == cookie_name)
{
var value_end = document.cookie.indexOf (";", value_begin);
if (value_end == -1)
{
value_end = cookie_length;
}
return unescape(document.cookie.substring(value_begin, value_end));
}
cookie_begin = document.cookie.indexOf(" ", cookie_begin) + 1;
if (cookie_begin == 0)
{
break;
}
}
return null;
}

Теперь, чтобы сохранить куки, передаем объявленной функции данные:

var name = "example" // имя cookie
var tmp = "Привет, я ваша cookie!"; // записываемое значение
expires = new Date(); // получаем текущую дату
expires.setTime(expires.getTime() + (1000 * 86400 * 365)); // вычисляем срок хранения cookie
set_cookie(name, tmp, expires); // устанавливаем cookie с помощью функции set_cookie

Чтобы получить куки, достаточно вызвать функцию

var c = get_cookie('example');