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{пройшов експертну оцінку консорціуму: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 не слід - необхідно натиснути кнопку "Скасувати".