Ниже рассматриваются несколько функций на 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, вы можете скачать