Cookies в PHP.

Як я вже говорив, браузер клієнта можна годувати булками (cookies). Розповівши загальне пристрій cookies, розповім про те, як це реалізується на конкретному прикладі, а саме в мові PHP. Розповідь про cookies в perl, можливо, давав би більше інформації про технічну сторону установки cookie (у perl заголовки повідомлень http треба писати руками), але зате в PHP це зручніше реалізовано.

У PHP одна і та ж функція setcookie відповідає за створення, редагування та видалення cookies. Розглянемо найпростіший приклад – установка на комп'ютері користувача булки з інформацією про те, чи був він на цій сторінці чи ні. Це робиться так:

setcookie ("visted","true");

Після цього у вас на диску з'являється c cookie з інформацією про те, що цю сторінку ви вже відвідували. Як довго буде діяти cookie? Оскільки ми використовували тільки два параметри, а інші потрібні параметри залишили без уваги, у них встановилися стандартні значення: діє до закриття всіх вікон браузера, в домені встановив булку скрипта, по незахищеному з'єднанню. А якщо ми хочемо порахувати скільки візитів відбулося протягом року? Як встановити ці значення? Скористаємося повним синтаксисом setcookie:

int setcookie ( string name [, string value [, int expire
[, string path [, string domain [, int secure]]]]])

Як бачите, ми можемо вказати не тільки ім'я cookie і значення, але також і час дії (expire – у секундах, що пройшли з 1970-го року), шлях (стандартне значення "/"), домен ("домен.установівшего.кукі. скрипта ") і секьюрность (0), тобто також і область дії cookie.

Існує обмеження за кількістю cookie на домен (20 штук), тому насправді в cookie зберігається масив, і ми можемо в одній булці зберігати ім'я користувача і кількість його входів на сторінку (просто використовуйте значення cookie як масив). Розглянемо скрипт – лічильник відвідин сторінки користувачем.

if (!empty($HTTP_COOKIE_VARS["count"]))
{
	$howmuch = $HTTP_COOKIE_VARS["count"];
}
else
{
	$howmuch = 0;
};
$howmuch++;
setcookie("count",$howmuch,time() + 3600);
print "Ви на цій сторінці $ howmuch-й раз.";

Як бачите, для початку ми перевіряємо, чи є вже на комп'ютері користувача 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:

setcookie("count");

Ось і все! Годуйте браузер булками!

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


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

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

Ваш отзыв

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

*

*