PHP та Cookies

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук

Знайомство

Cookies - це механізм зберігання даних браузером віддаленого комп'ютера для ідентифікації відвідувачів, що повертаються та зберігання параметрів веб-сторінок (наприклад, змінних). Файли Cookies являють собою звичайні текстові файли, які зберігаються на диску у відвідувачів сайтів.

Наведемо приклад використання Cookies на конкретному прикладі.

Припустимо, нам потрібно написати лічильник відвідування сайту. Нам потрібно знати, яке число відвідувань сайту здійснювалося кожним конкретним відвідувачем. Дану задачу можна вирішити двома способами. Перший з них полягає у веденні обліку IP-адрес користувачів. Для цього потрібна база даних всього з однієї таблиці, приблизна структура якої така:

IP-адреса кількість відвідувань
210.124.134.203 7
212.201.78.207 14
83.103.203.73 3

Коли користувач заходить на сайт, нам потрібно визначити його IP-адресу, знайти в базі даних інформацію про його відвідування, збільшити лічильник і вивести його в браузер відвідувача. Написати обробник (скрипт) подібної процедури нескладно. Однак при використанні такого методу з'являються проблеми наступного характеру:

  • Для кожної IP-адреси потрібно вести облік в одній таблиці, яка може бути дуже великою. А з цього випливає нераціональне використання процесорного часу і дискового простору;
  • У більшості домашніх користувачів IP-адреси є динамічними. Тобто, сьогодні у нього адресу 212.218.78.124, а завтра - 212.218.78.137. Таким чином, велика ймовірність ідентифікувати одного користувача кілька разів.

Можна використовувати інший спосіб, який набагато легше в реалізації і більш ефективний. Треба встановити в Cookie змінну, яка буде зберігатися на диску віддаленого користувача. Ця змінна і буде зберігати інформацію про відвідування. Вона буде зчитуватися скриптом при зверненні відвідувача до сервера. Вигода такого методу ідентифікації очевидна. По-перше, не потрібно зберігати безліч непотрібної інформації про IP-адреси. По-друге, нас не цікавлять динамічні IP-адреси, оскільки кожен відвідувач сайту зберігає дані про його відвідування у себе на комп'ютері.

Зрозуміло, що Cookie можна використовувати для збереження невеликої за обсягом інформації у клієнта. Наприклад:

  • колір фону сторінок
  • мова
  • оформлення таблиць
  • іншої інформації


Програмування Cookies

Для установки Cookies використовується функція SetCookie (). Для цієї функції можна вказати шість параметрів, один з яких є обов'язковим:

  • name - задає ім'я (рядків), закріплене за Cookie;
  • value - визначає значення змінної (рядок);
  • expire - час "життя" змінної (ціле число). Якщо цей параметр не вказати, то Cookie будуть "жити" до кінця сесії, тобто до закриття браузера. Якщо час вказано, то, коли воно настане, Cookie самознищиться.
  • path - шлях до Cookie (рядок);
  • domain - домен (рядок). Як значення встановлюється ім'я хоста, з якого Cookie був встановлений;
  • secure - передача Cookie через захищене HTTPS-з'єднання.

Зазвичай використовуються тільки три перші параметра.


Приклад встановлення Cookies:

<? php
// Встановлюємо Cookie до кінця сесії:
SetCookie ("COOK", "something");
// Встановлюємо Cookie на одну хвилину після установки:
SetCookie ("COOK_2", "something_2", time () +60);
?>

При використанні Cookies необхідно мати на увазі, що вони повинні встановлюватися до першого виводу інформації в браузер (наприклад, оперетор echo або висновком якої функції). Тому бажано встановлювати Cookies на самому початку скрипта... Cookies встановлюються за допомогою певного заголовка сервера, а якщо скрипт виводить хоч щось, то це означає, що починається тіло документа. В результаті Cookies не можуть бути встановлені і може бути виведено попередження. Тому лупіть їх в самий початок документа! =) Для перевірки успішності установки Cookies можна використовувати такий метод:

<?php
// Встановлюємо Cookie до кінця сесії:
// У разі успішного встановлення Cookie, функція SetCookie повертає TRUE:
if (SetCookie ("Test", "Value"))  
printf(" Cookies успішно встановлені! ");
?>


Читання значень Cookies

Отримати доступ до Cookies та їх значенням досить просто. Вони зберігаються в суперглобальних масивах і $_COOKIE і $HTTP_COOKIE_VARS.

Доступ до значень здійснюється по імені встановлених Cookies, наприклад:

echo $_COOKIE ['my_cookie'];
// Виводить значення встановленої Cookie 'My_Cookie'


Приклад встановлення Cookie і подальшого його читання:

<? Php
// Встановлюємо Cookie 'test' зі значенням 'Hello' на одну годину:
setcookie("test", "Hello", time () +3600);
// При наступному запиті скрипта виводить 'Hello':
echo @$_COOKIE ['test'];
?>


У розглянутому прикладі при першому зверненні до скрипту встановлюється Cookie "test" зs значенням "hello". При повторному зверненні до скрипту буде виведено значення Cookie "test", тобто рядок "Hello".

При читанні значень Cookies звертайте увагу на перевірку існування Cookies, наприклад, використовуючи оператор isset (). Або шляхом подавлення виведення помилок опереатором @

А ось приклад, як побудувати лічильник числа завантажень сторінки за допомогою Cookies:

<? Php
// Перевіряємо, чи був вже встановлений Cookie 'Mortal',
// Якщо так, то читаємо його значення,
// І збільшуємо значення лічильника звернень до сторінки:
if (isset ($_COOKIE ['Mortal'])) $cnt = $_COOKIE ['Mortal'] +1;
else $cnt = 0;
// Встановлюємо Cookie 'Mortal' зо значенням лічильника,
// З часом "життя" до 18/07/29,
// Тобто на дуже довгий час:
setcookie ("Mortal", $cnt, 0x6FFFFFFF);
// Виводить число відвідувань (завантажень) цієї сторінки:
echo " Ви відвідували цю сторінку ". @$_COOKIE ['Mortal']. " разів ";
?>


Видалення Cookies

Іноді виникає необхідність видалення Cookies. Зробити це нескладно, необхідно лише знову встановити Cookie з ідентичним ім'ям і порожнім параметром. Наприклад:

<?Php
// Видаляємо Cookie 'Test':
SetCookie ("Test", "");
?>

Установка масиву Cookies і його читання

Ми можемо встановити масив Cookies, використовуючи квадратні дужки в іменах Cookies [], а потім прочитати масив Cookies і значення цього масиву:

<? Php
// Встановлюємо масив Cookies:
setcookie ("cookie[1]", "Перший");
setcookie ("cookie[2]", "Другий");
setcookie ("cookie[3]", "Третій");
// Після перезавантаження сторінки ми відобразимо
// Склад масиву Cookies 'cookie':
if (isset ($_COOKIE['cookie'])) {
    foreach ($_COOKIE['cookie'] as $name => $value) {
        echo "$name: $value";
    }
}
?>


Переваги використання Cookies незаперечні. Однак існують і деякі проблеми їх використання. Перша з них полягає в тому, що відвідувач може блокувати прийом Cookies браузером або попросту видалити всі Cookies або їх частину. Таким чином, ми можемо мати деякі проблеми в ідентифікації таких відвідувачів.