function setCookie(name,value)
{
argv=setCookie.arguments;
argc=setCookie.arguments.length;
expires=(argc>2)?argv[2]:null;
path=(argc>3)?argv[3]:null;
domain=(argc>4)?argv[4]:null;
document.cookie=name+"="+escape(value)+
((expires==null)?"":";expires="+expires.toGMTString())+
((path==null)?"":";path="+path)+
((domain==null)?"":";domain="+domain);
}
Параметрами функции setCookie() являются параметры
HTTP-заголовка Set-Cookie, из них обязательными
являются два: имя Cookie и его данные. При своем вызове функция setCookie() определяет наличие заданных параметров и
их значения и на основании этого формирует Cookie.
Поскольку при запросе браузера данные наборов Cookie, посылаемые серверу, могут содержать символы с кодами ASCII свыше 128,
а также символы разделительных знаков и другие управляющие символы, то для
правильной передачи по сети необходимо осуществить их url-кодирование. Это
осуществляется с помощью встроенной функции JavaScript escape() (для обратного декодирования может быть
использована встроенная функция unescape()).
В примере № 4 с помощью функции userReg() осуществляется регистрация пользователя, а
с помощью функции createCookie() на основании введенных данных выполняется формирование Cookie:
Пример 4
<HTML>
<HEAD>
<TITLE>Создание Cookie средствами JavaScript</TITLE>
<STYLE>
TD{width:150;font:6mm;color:blue;background:#e0e0ff;border:6 outset blue}
</STYLE>
<SCRIPT SRC="setcookie.js"></SCRIPT>
<SCRIPT>
function userReg() //Регистрация пользователей
{
regW=open("","","width=350, height=100, resizable");
regW.moveTo(200,350);
with (regW.document)
{
write('<HEAD><STYLE>INPUT{position:absolute;left:100;font:5mm;'+ 'color:#900090;background:#FFFFF0}</STYLE></HEAD><BODY>');
write('<FORM NAME="f1">');
write('<P>Имя: <INPUT TYPE=text NAME="txt1">');
write('<P>Данные:<INPUT TYPE=text NAME="txt2">');
write('</FORM></BODY>');
f1.txt1.focus();
}
}
function createCookie() //Запись введенных данных в Cookie
{
if (!regW.document.f1.txt1.value)
{
alert("Имя не введено");
regW.document.f1.txt1.focus();
}
else if (!regW.document.f1.txt2.value)
{
alert("Данные не введены");
regW.document.f1.txt2.focus();
}
else // Если имя и данные введены - создать Cookie
{
user_name=regW.document.f1.txt1.value;
user_data=regW.document.f1.txt2.value+":0";
expireAt=new Date;
if (expireAt.getMonth()==11)
{
expireAt.setYear(expireAt.getYear()+1);
expireAt.setMonth(0);
}
else expireAt.setMonth(expireAt.getMonth()+1);
// expireAt.setTime(expireAt.getTime()+24*60*60*1000);
setCookie(user_name,user_data,expireAt);
regW.close();
}
}
function deleteCookie() // Просмотр и удаление Cokie
{
if (!document.cookie) alert("Cookie отсутствуют!")
else
{
expireAt=new Date();
expireAt.setYear(expireAt.getYear()-1);
window.status=document.cookie;
cookies=document.cookie.split("; "); // Разбиваем на отдельные Cookie
for (i=0; i<cookies.length; i++)
if (confirm("Вы хотите удалить Cookie: \n"+cookies[i]+"?"))
setCookie(cookies[i].split("=")[0],"",expireAt);
}
}
</SCRIPT>
</HEAD>
<BODY onLoad="moveTo(100,100); resizeTo(900,500);"
onMousedown="if(event.button==3) {deleteCookie(); return false}">
<TABLE cellspacing=10>
<TD onClick="userReg()">Регистрация пользователя
<TD onClick="createCookie()">Регистрация закончена
</TABLE>
</BODY>
</HTML>
Для осуществления регистрации пользователю необходимо щелкнуть по кнопке
"Регистрация пользователя". При этом вызывается функция userReg(), которая создает окно регистрации regW, в котором динамически с помощью метода regW.document.write() формируются форма ("f1"),
содержащая поля для ввода имени пользователя ("txt1") и его данных ("txt2").
Для удобства фокус с помощью метода focus() устанавливается на первое поле.
Пользователю после заполнения формы необходимо
подтвердить правильность введенных данных, щелкнув по кнопке "Регистрация
закончена". При этом вызывается функция createCookie(),
которая выполняет следующие действия:
- проверяет, заполненны ли в окне регистрации поля имени пользователя и его
данных, если нет - выводит на экран соответствующее предупреждение, если да -
заносит данные из этих полей соответственно в переменные user_name и user_data;
- с помощью объекта Date занесит в переменную expireAt текущеую дату и текущее время и, увеличивая
его на один месяц, устанавливает тем самым срок существования создаваемого
Cookie, равным одному месяцу. Другим вариантом является прибавление к текущему
времени значения промежутка времени, заданного в миллисекундах. Например, для
задания инервала времени, равного одним суткам, можно использовать выражение:
expireAt.setTime(expireAt.getTime()+24*60*60*1000);
- с помощю вызова функции setCookie(user_name,user_data,expireAt) формирует
набор Cookie, соответствующий введенным пользователем данным.
Если функции userReg() и createCookie() предназначены для регистрации
пользователя и вызываются щелчками по соответствующим кнопкам, то функция deleteCookie() предназначена для администрирования
Cookie (их просмотра и удаления). Поэтому для вызова этой функции было
выбрано одновременное нажатие двух клавиш мышки.
Функция deleteCookie() выполняет следующие действия:
- проверяет, имееются ли на компьютере Cookie, и, если нет - выводит
соответствующее предупреждение на экран;
- с помощью метода split объекта String преобразует строку, содержащую все Cookie
(document.cookie) в массив строк cookies, представлящих отдельные наборы Cookie;
- в цикле просматривает массив cookies, осуществляя
вывод отдельных его элементов с помощью метода confirm() на экран с вопросом, надо ли данный набор
Cookie удалять. Если да - администратор подтверждает это, нажимая "OK", при этом
данный набор Cookie будет удален путем использования функции setCookie() с такими параметрами:
- nane - имя удаляемого Cookie;
- data - пустая строка;
- expireAt - прошедщее время (срок истечения времени Cookie минус один год).
Если удалять Cookie не следует - необходимо нажать кнопку "Отмена".