Сесії в PHP

18

Від автора: У цій статті ми поговоримо про сесіях в PHP. Т. к. протокол HTTP не підтримує збереження даних між двома різними операціями, були придумані сесії.

Це дуже спрощує роботу, як програмістам, так і користувачам. Наприклад, сесії використовуються після авторизації користувача на сайті: тримають в пам’яті сервера дані про те, що користувач дозволено, і що тепер йому можна дати деякі права адміністрування або використання сайту коментування, перегляд закритих для гостей сторінок або ж написання-редагування-видалення новин на сайті, etc.).

Сесії в PHP використовуються там, де потрібно утримати дані про користувача між транзакціями. Тобто, кожен новий запит виконується як новий, без будь-якого зв’язку з попереднім, і ось якраз сесія грає роль відсутньої ланки, яка б зв’язала ці два запиту.

Так само сесії грають якусь роль сек’юріті. Як це розуміти і що це за трактування? А просто зрозуміти, що це банальна захист інтерактивних частин сайту від небажаної інформації (тобто спаму).

Перед вивченням уроку, я рекомендую скачати ісходник собі на комп’ютер!

Як працюють сесії PHP?

Першим ділом ідентифікується браузер. Йому видається унікальний ідентифікатор, який буде передаватися при кожному запиті.

Ідентифікатор – це звичайна змінна з певним значенням. За замовчуванням її ім’я PHPSESSID.

І мета PHP полягає в тому, щоб передати (двома способами) цю змінну браузеру, щоб той, у свою чергу, повернув її з наступним запитом.

Грубо кажучи, на сервері створюється файл з усіма змінними для створеної сесії (+встановлюється період життя сесії). І при відкритті сесії в якомусь файлі PHP, то відразу ж йде запит про отримання id cookies (див. вище — PHPSESSID), якщо немає такої cookie з ім’ям PHPSESSID , то створюється нова сесія. Ну а якщо є PHPSESSID, то з сервера завантажується все пов’язане з попередньою сесією. (Наприклад, зареєстровані змінні сесії).

Способи передачі значення змінної PHPSESSID

Через Cookies

Через URL

Коротко про способи

У браузер записується cookie з ім’ям PHPSESSID, природно, якщо користувач вирішив записувати їх у себе в браузері. Детальніше про cookies можна почитати тут, на цьому сайті.

Через URL – PHP дописує до кожної посиланням передачу id сесії (як для мене, це не дуже зручно).

Підсумок: Крім дозволу на використання cookie при передачі id сесії, можна задавати дозвіл для PHP в файлі php.ini для ось таких рядків:

session.use_cookies = (1 – дозволити cookies, 0 — заборонити)

session.use_trans_sid = (1 – дозволити передачу id сесії через url, 0 — заборонити)

А ось і скріншот того, як повинен виглядати cookie PHPSESSID в браузері

Сесії в PHP

Коментар до скріншоту: як ви бачите, я маю cookie PHPSESSID для домену sessions.gromitsu. Як я це отримав? Все просто. Я створив файл index.php докорінно домену sessions.gromitsu і відкрив-закрив у ньому сесію.

Встановлення (відкриття) сесії PHP

Відкриття сесії PHP проводиться за допомогою функції session_start(), яка (УВАГА!) викликається в самому початку php файлу. Інакше вилізе помилка (див. нижче).

session_start();

Ця функція перевіряє, чи існує PHPSESSID (або в cookies, або на засланні (метод GET або POST)). Якщо так, завантажує зареєстровані змінні сесії, якщо ні, то створює нову сесію.

Реєстрація змінних і видалення сесії

Реєстрація змінних сесії.

Існує суперглобальный масив $_SESSION, який містить в собі всі збережені дані протягом всієї сесії. Оперувати цим суперглобальным масивом так само просто, як і з простим.

$_SESSION[‘yourname’] = «Vasya»; // зберігаємо ім’я Вася суперглобальный масив $_SESSION.
Замість yourname може бути що завгодно.

Виведення певних даних з $_SESSION

echo $_SESSION[‘yourname’]; //виведе Vasya

Ще додам, що реєструвати змінні можна, як і масиви. Про що я? Дивіться нижче.

Сесії в PHP

Закриття сесії

Закриття сесії проводиться, як ви вже бачили, за допомогою функцій session_unset() (звільнення всіх змінних сесії від значень) і session_destroy() (закриття сесії).

Розробимо простий скрипт ініціалізації імені користувача на одній сторінці, видалення сесії і виведення привітання з ім’ям цього користувача на іншу сторінку.

pageone.php

Перейти на сторінку другу

Сесії в PHP

pagetwo.php

Сесії в PHP

Ну і сторінка, до якої дані сесії не збереглися. Сценарій такий же як і в pagetwo.php

pagethree.php

Сесії в PHP

Наостанок поговоримо про ЕРРОРАХ, які можуть виникнути в процесі навчання.

Warning: Cannot send session cookie — headers already sent

Warning: Cannot send session cache limiter — headers already sent

Ці ERRORS говорять про те, що ще до використання функції session_start() був переданий хоч один HTTP заголовок. Що це? При спілкуванні сервера та браузера спочатку йде запит на сервер, звідки потім спочатку повертається HTTP заголовок, а потім вся інформація, яку ви запитували. Так от, в PHP для зручності придумали так, щоб функції header(), set_cookie(), session_start() передавали самі HTTP заголовки. І ось, недосвідчений програміст, ще до виконання однієї з вище написаних функцій, мав необережність поставити зайвий символ (пробіл, цифру, букву). Так от, до функцій header(), set_cookie(), session_start() не повинно бути жодного символу. Абсолютно ніякого! Тоді все буде працювати на УРА!

На цьому урок по роботі з сесіями в PHP, закінчено. Буду радий Вашим коментарям та питань.

З повагою, Влад Павук.

Сесії в PHP

E-mail: [email protected]

Проект webformyself.com — Як створити свій сайт. Основи самостійного сайтобудування

«Кіберсант-вебмастер» — самий повний курс по сайтостроению в рунеті!

P. S. Хочете опублікувати цікавий тематичний матеріал і заробити? Якщо відповідь «Так», то тисніть сюди.