Робота з cookies
Відстеження користувачів та персоналізування сайту належать до числа найпопулярніших і разом з тим неоднозначно сприймаються можливостей web-сайтів. Переваги очевидні - ви можете пропонувати користувачам саме ту інформацію, яка їх цікавить. З іншого боку, виникає чимало запитань, пов'язаних з конфіденційністю, оскільки з'являється можливість «стежити» за тим, як користувач переміщується від сторінки до сторінки і навіть від сайту до сайту.
Концепція «спостереження» за користувачем в процесі переміщення по сайту зазвичай називається «відстеженням сеансу» (session tracking). Беручи до уваги величезний обсяг корисної інформації, одержуваної в результаті відстеження сеансу на сайті, можна сказати, що переваги відстеження сеансів і індивідуалізації змісту сайту значно перевищують будь-які недоліки. Навряд чи цю книгу можна було б вважати повноцінним підручником по PHP, якби я не присвятив в ній цілий розділ засобам відстеження сеансу в PHP. У цьому розділі ми розглянемо деякі концепції, які мають безпосереднє відношення до відстеження сеансів, а саме - cookie і їх застосування, а також унікальні ідентифікатори сеансів. Глава завершується зведенням стандартних функцій PHP, призначених для відстеження сеансів.
Що таке cookie?
Внаслідок того, що cookie зазвичай зв'язуються з конкретним користувачем, в них часто зберігається унікальний ідентифікатор користувача (UIN). Цей ідентифікатор заноситься в базу даних на сервері і використовується в якості ключа для вибірки з бази всієї інформації, пов'язаної з цим ідентифікатором. Звичайно, збереження UIN в cookie не є обов'язковою вимогою; ви можете зберегти будь-яку інформацію за умови, що її загальний обсяг не перевищує 4 Кбайт (4096 байт).
компоненти cookie
У cookie зберігаються і інші компоненти, за допомогою яких розробник може обмежувати використання cookie з позицій домену, шляху, терміну дії та безпеки. Нижче наведені описи різних компонентів cookie:
Хоча при створенні cookie використовуються одні й ті ж синтаксичні правила, формат зберігання cookie залежить від браузера. Наприклад, Netscape Communicator зберігає cookie в форматі такого вигляду:
phprecipes.com FALSE / FALSE 97728956 bgcolor blue
В Internet Explorer те ж саме cookie виглядало б інакше:
Internet Explorer зберігає свої cookie в папці з ім'ям «Cookies», a Netscape Communicator використовує для цієї мети один файл з ім'ям cookies.
Cookie і PHP
Досить теорії. Звичайно, вам не терпиться скоріше дізнатися, як поставити значення cookie в PHP. Виявляється, дуже просто - для цієї мети використовується стандартна функція setcookie ().
Функція setcookie () зберігає cookie на комп'ютері користувача. Синтаксис функції setcookie ():
int setcookie (string ім'я [string значення [, int дата [, string шлях [, string домен [, int безпеку]]]]])
Якщо ви прочитали загальні відомості про cookie, то сенс параметрів setcookie () вам вже відомий. Якщо ви пропустили цей розділ і не знайомі з компонентами cookie, я рекомендую повернутися до початку глави і перечитати його, оскільки всі параметри setcookie () були описані вище.
Перш ніж йти далі, я попрошу вас перечитати наступну фразу не один і не два, а цілих три рази. Значення cookie має встановлюватися до передачі в браузер будь-який інший інформації, що відноситься до сторінці. Напишіть цю фразу 500 раз в зошиті, зробіть татуювання, навчіть свого папуги вимовляти ці слова - коротше, проявіть фантазію. Іншими словами, значення cookie не може встановлюватися в довільному місці web-сторінки. Воно повинно бути задано до відправки будь-яких даних в браузер; в іншому випадку cookie не працюватиме.
Є ще одне важливе обмеження, про який також необхідно пам'ятати, - ви не зможете створити cookie і використовувати його на тій же сторінці. Або користувач повинен вручну оновити сторінку (хоча розраховувати на це не можна), або вам доведеться почекати наступного запиту цієї сторінки - і тільки після цього можна буде використовувати cookie.
У наступному прикладі функція setcookie () використовується для створення cookie з ідентифікатором користувача:
$ Cookie_set = setcookie ( "uid", $ value, time () + 3600 "/", ".phprecipes.com", 0);
Наслідки створення cookie:
- Після перезавантаження або переходу на іншу сторінку стає доступною змінна $ userid, що містить ідентифікатор 4139b31b7bab052.
- Термін дії cookie закінчується рівно через одну годину (3600 секунд) після відправки. Після закінчення цього терміну cookie стає недійсним.
- Доступ до cookie дозволений тільки з домена phprecipes.com.
- Дозволений доступ до cookie через небезпечний протокол.
У наступному прикладі (лістинг 13.1) cookie використовується для зберігання параметрів форматування сторінки (в даному випадку - кольору фону). Зверніть увагу: значення cookie задається лише в результаті виконання дії, встановленого для форми.
Лістинг 13.1.Сохраненіе кольору фону, обраного користувачем
// Якщо змінна $ bgcolor існує
setcookie ( "bgcolor", $ bgcolor, time () + 3600);