Введення:

Звідки виник термін "cookie" ніхто достовірно не знає, хоча вважається, що
за часів зародження Unix-систем десь використовувалося словосполучення Magic
Cookies. Малися на увазі "квитанції" (token, ticket), якими обмінювалися
програми.

Cookie є рішенням однієї з спадкових проблем HTTP протоколу
(HyperText Transfer Protocol). Ця проблема полягає в непостійності
з'єднання між клієнтом і сервером, як при FTP або Telnet сесії, тобто для
кожного документа (або файлу) при передачі по HTTP протоколу надсилається
окремий запит. Включення cookie в HTTP протокол дало часткове розв'язання
проблеми. Інакше кажучи, транзакція завершується після того, як браузер зробив
запит, а сервер видав відповідну відповідь. Відразу після цього сервер
"Забуває" про користувача і кожен наступний запит того ж користувача вважає
новим користувачем.

Використовуючи cookie, можна емулювати сесію по HTTP протоколу. Коротко принцип
емуляції сесії такий: на першому запиті видається соотвествующєє значення
cookie, а при кожному наступному запиті це значення читається з змінної
оточення HTTP_COOKIE і відповідним чином обробляється.

Простий приклад: є форма, де користувачеві пропонується вказати своє ім'я,
з неї викликається скрипт, прописує значення cookie в браузер користувача.
При кожному наступному заході на основі аналізу значення cookie з браузера
користувача на сторінці з'являється або іменне привітання (якщо є
встановлене значення cookie), або первісна форма із запитом імені
користувача (якщо значення cookie не встановлено).

Отже, приступимо до практики:


1.Заданіе cookie за допомогою Php


Для завдання цієї функції у мові php є оператор:
setcookie (). Саме
приємне, сто функція setcookie () сприймає до шести аргументів, в залежності
від того, як ви збираєтеся керувати значеннями cookie і хто буде зчитувати її
значення.

Найпростіший спосіб встановити cookie такий:

setcookie(“name”, “bret”);

Потім, для кожної наступної сторінки на Вашому сайті, що переглядається в
протягом даної сесії (поки користувач не покине сайт) змінна $ name буде
мати значення "bret" і його можна легко прочитати засобами PHP. Цей тип
cookie відомий як cookie-сесія, оскільки значення зберігається протягом
користувальницької сесії.

Якщо Ви хочете, щоб значення cookie запам'ятовувалося браузером після того, як
користувач закінчить сесію, Ви повинні передати функції setcookie () третій
параметр – дату закінчення терміну дії cookie. Оскільки PHP сформувався в
основному в середовищі Unix, Ви повинні представити час закінчення терміну дії
cookie як число секунд, що пройшли з 1 січня 1970 р. Якщо Ви маєте досвід
програмування для Unix, це не здасться Вам дивним. Але, якщо Ви
програмували тільки в середовищі Windows або Macintosh, Ви, може бути, здивуєтеся,
що за пришелепкуватий народ ці Unix-оіди.

Але не бійтеся. PHP має дуже зручну функцію, mktime (). Ви вказуєте їй у
Як параметри (у вказаному порядку) годину, хвилину, секунду, місяць, день і
рік, що задають той момент часу, який Ви хочете представити в сприйманої
UNIX форматі, і mktime () повертає Вам число секунд, що пройшли з 1 січня 1970
р. до зазначеного моменту часу. Наприклад, якщо Ви хочете, щоб термін дії
cookie закінчився 1 січня 2000 р., Ви записуєте:

<?php
$y2k = mktime(0,0,0,1,1,2000);
setcookie(“name”, “bret”, $y2k);
?>

Якщо Ви хочете змінити значення cookie на нове, Ви можете просто переписати
його (її?) значення. Таким чином, навіть якщо браузер вже посилав значення cookie
сервера на одній з попередніх сторінок, цілком можливо повідомити сервер, що в
дійсності Вас кличуть "jeff."

<?php
$y2k = mktime(0,0,0,1,1,2000);
setcookie(“name”, “jeff”, $y2k);
?>

Зверніть увагу на те, що при цьому не змінюється значення змінної $ name. Воно встановлюється при завантаженні сторінки. Якщо Ви
хочете щоб значення змінної змінювалося синхронно зі зміною значення
cookie, Ви повинні змінити код наступним чином:

<?php
$name = “jeff”;
$y2k = mktime(0,0,0,1,1,2000);
setcookie(“name”, $name, $y2k);
?>

Наступні два параметри функції setcookie () дозволяють Вам задати шлях та ім'я
домену того, хто може прочитати значення Вашого cookie. За замовчуванням тільки
сторінки, розташовані в тому ж каталозі або нижче в структурі підкаталогів того
сервера, який встановив cookie, можуть прочитати його (її??) значення. Це
робиться з міркувань безпеки. Однак, якщо у Вашого сервера два доменних
імені: "www.domain.com" і "other.domain.com", і Ваш екаунт дозволяє Вам
обслуговувати сторінки з каталогу ~ / myhome, Ви повинні викликати функцію
setcookie () наступним чином:

<?php
setcookie(“name”, “jeff”, $y2k, “~/myhome”, “.domain.com”);
?>

Останній параметр функції setcookie (), який ми ніколи не використовували,
вимагає, щоб значення cookie передавалося тільки на ті Web-сервера, які
наспіл безпечний протокол з'єднання, такий як SSL. Якщо Вам це потрібно, то
задайте для шостого параметра значення 1.

Видалити cookie теж дуже просто, достатньо передати функції setcookie () ім'я
cookie і PHP зробить все інше:

<?php setcookie(“name”); ?>

На закінчення потрібно зробити ще одне зауваження, що стосується використання
cookie. У силу того, як організована обробка cookies в протоколі HTTP,
необхідно встановити значення всіх cookie до виведення будь-якого тексту. Якщо
зробити навпаки, PHP видасть Вам попередження і значення cookie не буде
надіслано. Ось так правильно:

<?php
setcookie(“name”, “jeff”);
echo "Hello Everyone!";
?>

А так – ні:

<?php
echo "Hello Everyone!";
setcookie(“name”, “jeff”);
?>


2. Завдання cookie за допомогою JavaScript


Можна задавати значення
cookie, використовуючи мову JavaScript. Єдиний недолік цього способу
полягає в тому, що не всі браузери його підтримують. Нижче наведені приклади
функцій JavaScript, написані Олексієм
Александровим для скрипта "Організатор".

Приклад. Функція установки значення cookie

 / / Name – ім'я cookie
/ / Value – значення cookie
/ / [Expires] – дата закінчення дії
cookie (за замовчуванням – до кінця сесії)
/ / [Path] – шлях, для якого cookie дійсно
(За замовчуванням – документ, в якому значення було встановлено)
/ / [Domain] – домен, для якого cookie дійсно
(За замовчуванням – домен, в якому значення було встановлено)
/ / [Secure] – логічне значення, що показує чи потрібне
захищена передача значення cookie

function setCookie (name, value, expires, path, domain, secure) {
var curCookie = name + "=" + escape(value) +
((Expires)? "; Expires =" + expires.toGMTString (): "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "")
if (! caution | | (name + "=" + escape (value)). length <= 4000)
document.cookie = curCookie
else
if (confirm ("Cookie перевищує 4KB і буде вирізаний!"))
document.cookie = curCookie
}


Приклад. Функція читання значення cookie
Повертає встановлене
значення або порожній рядок, якщо cookie не існує.

/ / Name – ім'я зчитуваного cookie

function getCookie(name) {
var prefix = name + "="
var cookieStartIndex = document.cookie.indexOf(prefix)
if (cookieStartIndex == -1)
return null
var cookieEndIndex = document.cookie.indexOf
(";", cookieStartIndex + prefix.length)
if (cookieEndIndex == -1)
cookieEndIndex = document.cookie.length
return unescape(document.cookie.substring
(cookieStartIndex + prefix.length, cookieEndIndex))
}


Приклад. Функція видалення значення cookie
Принцип роботи цієї
функції полягає в тому, що cookie встановлюється з явно застарілим
параметром expires, в даному випадку 1 січня 1970 року.

/ / Name – ім'я cookie
/ / [Path] – шлях, для якого cookie дійсно
/ / [Domain] – домен, для якого cookie дійсно
function deleteCookie(name, path, domain) {
if (getCookie(name)) {
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT"
}


3. Завдання cookie за допомогою Perl


Найпотужніший і гнучкий спосіб
управління документами з використанням механізму cookie – за допомогою
CGI-скриптів. Завдання значення cookie на Perl буде виглядати наступним чином:
print "Content-type: text/htmln";
print "Set-Cookie: username=aaa13; expires=Friday,
31-Dec-99 23:59:59 GMT; path = /; domain = www.citforum.ru; nn ";
Скрипт
при видачі результатів роботи генерує HTTP заголовок:
Content-type: text/html
Set-Cookie: "username=aaa13; expires=Friday,
31-Dec-99 23:59:59 GMT; path=/; domain=www.webscript.ru;"

Щоб прочитати в скрипті раніше задане значення cookie, використовується
змінна оточення HTTP_COOKIE.

$cookie = $ENV{“HTTP_COOKIE”};

Далі можна аналізувати отриману рядок і, в залежності від лічених
значень, виконувати відповідні дії.

А тепер про грусном …


Обмеження:


Клієнт (браузер) має такі обмеження cookies:


  • всього може зберігатися до 300 значень cookies
  • кожен cookie не може перевищувати 4Кбайт
  • з одного сервера або домену може зберігатися до 20 значень cookie

    Якщо обмеження 300 або 20 перевищується, то віддаляється перша за часом
    запис. При перевищенні ліміту обсягу в 4Кбайт коректність значення cookie
    страждає – відрізається шматок запису (з початку цього запису) рівний перевищення
    обсягу.

    У разі кешування документів, наприклад, proxy-сервером, поле Set-cookie
    HTTP заголовка ніколи не кешується.

    Якщо proxy-сервер приймає відповідь, що містить поле Set-cookie в заголовку,
    передбачається, що поле доходить до клієнта незалежно від коду повернення 304
    (Not Modified) або 200 (OK). Відповідно, якщо клієнтський запит містить в
    заголовку Cookie, то він повинен дійти до сервера, навіть якщо жорстко встановлений
    параметр If-modified-since.

  • Схожі статті:


    Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

    Коментарів поки що немає.

    Ваш отзыв

    Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

    *

    *