Cookies та сесії (основи php - урок з курсу)

У цьому уроці я розповім, що таке cookies, про їх ролі і застосуванні.
Cookies різних сайтів ізольовані один від одного. Представляють вони собою пари "ім'я = значення". Для простоти можна уявити їх як текстовий файл такого виду:
Насправді, кожен браузер зберігає cookies по-своєму, що зараз не має для нас з вами ніякого значення.
Сервер відповідає, відправляючи запитувану сторінку разом з текстом, що містить HTTP-відповідь. Там може бути вказівка браузеру зберегти cookies:
Цей запит відрізняється від першого запиту тим, що містить рядок. яку сервер відправив браузеру раніше. Таким чином, сервер дізнається, що цей запит пов'язаний з попереднім. Сервер відповідає, відправляючи запитувану сторінку і, можливо, додавши нові cookies. Кількість cookies для одного сайту ніяк не обмежується.
Крім пари "ім'я = значення", cookie може містити термін дії. шлях і доменне ім'я. Домен і шлях кажуть браузеру, що cookie має бути відправлено назад на сервер при запитах URL для зазначеного домену та шляхи. Якщо вони не вказані, використовуються домен і шлях запитаної сторінки.
Фактично cookies визначаються трійкою параметрів "ім'я-домен-шлях". Іншими словами, cookies з різними шляхами або доменами є різними, навіть якщо мають однакові імена.
Дата закінчення вказує браузеру, коли видалити cookies. Якщо термін закінчення не вказано, cookies видаляється після закінчення призначеного для користувача сеансу, т. Е. З закриттям браузера.
Дата закінчення вказується в форматі "Нед, ДД-Міс-РРРР ГГ: ХХ: СС GMT". наприклад:
PHP має зручний набір функцій для роботи з cookies. Щоб встановити cookies на період сесії (до закриття браузера), скористайтеся функцією setcookie (). Наприклад, ось так:
Якщо ви хочете запам'ятати cookies на деякий час. припустимо, на тиждень, скористайтеся тією ж функцією, але з трьома параметрами:
Функція time () повертає поточний час. до нього ми додаємо тиждень (3600 24 7 секунд). Початківцю програмісту може здатися дивним такий формат часу, однак, повірте, дуже часто набагато зручніше працювати з цілочисельним значенням, ніж зі строковим поданням дати.
Функцію setcookie () можна викликати і з великим числом параметрів, якщо є необхідність встановити інші атрибути cookies. Однак в більшості випадків достатньо двох наведених раніше прикладів.
Щоб прочитати cookies. слід скористатися системної змінної $ _COOKIES:
Перевірити. чи встановлені cookies, можна так:
До речі, використовуючи словник $ _COOKIES. можна і зберігати значення cookies, але тільки на період сесії (без вказівки часу закінчення).
Протокол HTTP є протоколом "без збереження стану" і не має вбудованої можливості підтримувати сеанс роботи з сайтом. Іншими словами, якщо не вдаватися до різних хитрощів, сайт не «пам'ятає" ваших попередніх взаємодій.
Уявіть собі інтернет-магазин. Користувач вибирає товар, кладе його в кошик, а потім оплачує. Для оформлення покупки потрібно відвідати кілька сторінок. Причому сайт повинен розуміти, що це один і той же користувач, а також запам'ятовувати товари, які він відклав в кошик.
Для вирішення таких завдань в PHP реалізований механізм підтримки сесій. Якщо є необхідність запам'ятовувати стан сеансу, все, що потрібно зробити, - це викликати на початку сценарію функцію session_start ().
Ця функція перевірить, чи існує ідентифікатор сесії. Якщо немає, то він буде виділений і створиться файл, в якому можна буде зберігати інформацію, актуальну в рамках сесії (наприклад, список товарів в кошику).
Але де шукати цей самий ідентифікатор сесії. PHP пропонує два механізми:
Інформація. актуальна в рамках сесії, зберігається в системній змінній (словнику) $ _SESSION. Ось так можна зберегти дані:
А ось так прочитати:
Коли сесія більше не потрібна, наприклад користувач натиснув кнопку Вихід, слід знищити її. Для цього існує функція session_destroy (). Однак перед її викликом потрібно видалити всі збережені в сесії дані. Наприклад, ось так: