Ниже рассматриваются несколько функций на JavaScript для работы с cookie.
Данные cookie, которые можно получить с помощью сценария на JavaScript,
представляют собой единственную строку — значение свойства document.cookie.
Выбор значений отдельных элементов (параметров) cookie производится на основе
анализа содержимого этой строки методами объекта String.
Кроме того, если две и более cookie-записи (до 20) соответствуют одному и тому же домену,
то в JavaScript они все равно представляются одной строкой и разграничены точкой с запятой и пробелом.
Рассмотрим функцию readCookie(), читающую cookie-данные, соответствующие имени записи name, которое передается этой функции в качестве параметра:
function readCookie(name) { // чтение cookie-данных записи var xname = name + "="; var xlen = xname.length; var clen = document.cookie.length; var i = 0; while(i < clen){ var j = i + xlen if (document.cookie.substring(i, j) == xname) return getCookieVal(j) i = document.cookie.indexOf(" ",1) + 1; if (i == 0) break } return null }
Функция readCookie(name) возвращает значение cookie-записи с именем name или null, если такая запись не найдена. В теле этой функции использована еще одна, вспомогательная, функция getCookieVal(j), которая возвращает декодированное значение cookie-данных. Декодирование производится с помощью встроенной функции unescape(). Дело в том, что cookie-запись должна представлять собой кодированную строку, полученную путем обработки встроенной функцией escape(), чтобы, в частности, заменить пробелы специальными символами (%20). Вот, код этой функции:
function getCookieVal(n){ // вспомогательная функция, вызываемая из readCookie() var endstr = document.cookie.indexOf(";", n) if (endstr == -1) endstr = document.cookie.length return unescape(document.cookie.substring(n, endstr)) }
Теперь рассмотрим функцию writeCookie(), позволяющую создать или обновить cookie-запись:
function writeCookie(name, value, expires, path, domain, secure) { // запись cookie document.cookie = name +"=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "") }Эта функция принимает параметры:
name — строка, содержащая имя coockie-записи (обязательный параметр); value — строка, содержащая значение cookie (обязательный параметр); expires — объект даты (Date), содержащий срок хранения cookie-записи; если отсутствует, то после завершения работы браузера cookie-запись удаляется. path — строка, содержащая путь cookie-записи; если не указан, то используется путь вызванного документа; domain — строка, содержащая домен нужной cookie-записи; если не указан, то используется домен вызванного документа; secure — логическое значение (true или false), определяющее необходимость использования безопасного соединения.
Обратите внимание, что в теле функции writeCookie() происходит кодирование значения параметра value с помощью встроенной функции escape(). Для удаления cookie-записи можно использовать следующую функцию:
function deleteCookie(name, path, domain) { // удаление cookie-записи if (readCookie(name)) { document.cookie = name +"=" + ((path) ? "; path=" + path : "") + ((domain) ? "; domain="+domain : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT" } }Эта функция устанавливает дату срока хранения cookie-записи так, что запись будет удалена. Параметр path должен иметь такое же значение, которое использовалось при создании cookie-записи или иметь пустое значение (null), если при создании записи он не был определен. Таким же образом задается значение параметра domain. Советую вам поэкспериментировать с чтением, созданием и удалением cookie- записей. При этом нужно иметь в виду, что созданные или измененные cookie-записи будут записаны на диск только после закрытия браузера. До этого записи существуют лишь в кэше (оперативной памяти). С другой стороны, cookie-записи загружаются в оперативную память и становятся доступны как значение свойства document.cookie только при запуске браузера. Ниже приводится HTML-код для эксперимента со сценарием, записывающим и читающим cookie-запись:
<html> <script type="text/javascript"> function readCookie(name) { // чтение cookie-данных записи … // код } function getCookieVal(n){ // вспомогательная функция, вызываемая из readCookie() … // код } function writeCookie(name, value, expires, path, domain, secure) { // запись cookie … // код } / * Срок хранения — 1 год от текущей даты: */ var d1 = new Date(); var d2 = d1.getTime() + (365*24*60*60*1000); d1.setTime(d2); /* Запись и чтение cookie: */ writeCookie("myrecord","Привет",d1); alert(readCookie("myrecord")); </script> </html>Набор приведенных выше функций для работы с cookie, вы можете скачать