cookie є рішенням однієї з спадкових проблем http специфікації. Ця проблема полягає в непостійності з'єднання між клієнтом і сервером, як при ftp або telnet сесії, тобто для кожного документа (або файла) при передачі по http протоколу надсилається окремий запит. Включення cookie в http протокол дало часткове вирішення цієї проблеми.
cookie це невелика порція інформації, яку сервер передає клієнту. Клієнт (броузер) буде зберігати цю інформацію і передавати її серверу з кожним запитом як частина http заголовка. Деякі cookie зберігаються тільки протягом однієї сесії, вони віддаляються після закриття броузера. Інші, встановлені на певний період часу, записуються в файл. Зазвичай цей файл називається 'cookie.txt'.
Що можна робити за допомогою cookie?
Які браузери підтримують механізм cookies?
Не всі, звичайно, але найпопулярніші підтримують. Я точно знаю, що netscape (починаючи з найпершої версії), microsoft ie (трійка і четвірка - точно, про попередні не знаю), mosaic
Установка cookie.
Як виставляти cookies клієнтові залежить від того, як вони будуть використовуватися в подальшому. Це можна робити як за допомогою скриптів, так і за допомогою meta-тегів html. Можна маніпулювати часом життя виставлених cookies і встановлювати місце, в якому установки дійсні. Загальний формат установки такий: set-cookie: name = value; expires = date; domain = domain_name; path = path; secure
Установка cookie за допомогою html.
Найпростіший спосіб виставити cookie - використовувати відповідний meta-тег в заголовку будь-якого статичного html документа.
Установка cookie з використанням perl / cgi.
Інший спосіб виставити cookie - за допомогою серверного скрипта. На perl це буде виглядати приблизно так: перед тим як видавати серверний відповідь генерується http заголовок
Щоб прочитати скриптом значення cookie, яке було встановлено раніше, і відповідним чином виконати скрипт, використовується змінна оточення http_cookie. На perl це буде виглядати так:
Установка декількох cookie одночасно.
Як за допомогою html, так і за допомогою скриптів можна встановлювати кілька cookie разом:
cookies в php
Розглянемо найпростіший приклад - установка на комп'ютері користувача булки з інформацією про те, чи був він на цій сторінці чи ні. Це робиться так:
Після цього у вас на диску з'являється c cookie з інформацією про те, що цю сторінку ви вже відвідували. Як довго буде діяти cookie? Оскільки ми використовували тільки два параметри, а інші потрібні параметри залишили без уваги, в них встановилися стандартні значення: діє до закриття всіх вікон браузера, в домені встановив булку скрипта, по незахищеному з'єднанню. А якщо ми хочемо порахувати скільки відвідувань сталося протягом року? Як встановити ці значення? Скористаємося повним синтаксисом setcookie:
Як бачите, ми можемо вказати не тільки ім'я cookie і значення, але також і час дії (expire - в секундах, що пройшли з 1970-го року), шлях (стандартне значення "/"), домен ( "домен.установівшего.кукі. скрипта ") і секьюрность (0), тобто також і область дії cookie.
Існує обмеження по кількості cookie на домен (20 штук), тому насправді в cookie зберігається масив, і ми можемо в одній булці зберігати ім'я користувача і кількість його заходів на сторінку (просто використовуйте значення cookie як масив). Розглянемо скрипт - лічильник відвідування сторінки користувачем.
Як бачите, для початку ми перевіряємо, чи є вже на комп'ютері користувача cookie з ім'ям "count", і, якщо його немає, вважаємо, що користувач був на сторінці 0 раз. Доступ до інформації з cookie може бути отриманий двома способами: по-перше, якщо в php.ini встановлена настройка register_globals, автоматично створюється змінна $ count, по-друге, додається значення в масив $ http_cookie_vars. Більш правильним є використання другого способу, тому що php дуже любить створювати змінні, і в цьому випадку ми просто не знаємо - порода ця змінна в результаті передачі скрипту даних в query_string, через метод post або через cookie. Крім того, в останніх версіях php (4.2) функція register_globals за замовчуванням відключена, так що залишається взагалі тільки один спосіб отримати інформацію.
Наступним кроком є додаток до лічильника відвідувань одинички. Логічно - користувач адже зайшов на сторінку? Значить, збільшив кількість відвідувань на одиничку. Потім (до видачі будь-яких написів) ми повинні встановити cookie c новою інформацією, діючий годину. Щоб отримати час в секундах від 1970-го року, використовується функція time (), до якої ми додаємо шуканий час (3600 секунд). Слід зазначити, що час встановлюється в часовому поясі користувача, так що запросто може виявитися, що час життя cookie вже минув. З цим треба боротися!
І тільки після того, як ми встановили cookie ми можемо почати щось показувати користувачеві, що ми і робимо, друкуючи кількість відвідувань їм цієї сторінки.
Увага! cookies можна встановлювати тільки до якої б то не було видачі тексту! Прослідкуйте, щоб до використання setcookie не було операторів print. Повідомлення про помилки теж псують нам установку cookie. Вся проблема полягає в тому, що інформація про cookie відноситься до області заголовків, а то, що видає print - немає.
Але ми повинні не тільки вміти додати cookie, а й видалити. Це робиться все тієї ж багатостраждальної функцією setcookie, тільки на цей раз ми викликаємо її з одним єдиним параметром - ім'ям cookie: