PHP — Сесії

21

Від автора: альтернативний спосіб зробити доступними дані на різних сторінках веб-сайту — використовувати PHP сесії. Сесія створює файл в тимчасовому каталозі на сервері, в якому зберігаються зареєстровані змінні сесії та їх значення. Ці дані будуть доступні для всіх сторінок сайту під час цього відвідування.

Розташування тимчасового файлу визначається параметром з ім’ям session.save_path у файлі php.ini. Перед використанням будь-якої змінної сесії переконайтеся, що ви встановили цей шлях. Ось що відбувається при відкритті сесії,

Спочатку PHP створює унікальний ідентифікатор для цієї конкретної сесії, який представляє собою випадкову рядок з 32 шістнадцяткових чисел, таких як 3c7foj34c3jj973hjkop2fc937e3443.

Файл-куки PHPSESSID автоматично відправляється на комп’ютер користувача для зберігання унікальною рядка ідентифікації сесії.

На сервері в зазначеному часовому каталозі автоматично створюється файл, який містить ім’я унікального ідентифікатора з префіксом sess_, тобто sess_3c7foj34c3jj973hjkop2fc937e3443.

Коли PHP-скрипт хоче отримати значення змінної сесії, PHP автоматично отримує унікальну рядок ідентифікатора сесії з cookie PHPSESSID, а потім шукає в тимчасовому каталозі файл з таким іменем і виконує перевірку шляхом порівняння обох значень.

Сесія закінчується, коли користувач закриває браузер або покидає сайт, сервер завершує сесію після закінчення заданого періоду часу, зазвичай 30 хвилин.

Відкриття сесії PHP

Сесія PHP відкривається з допомогою функції session_start(). Ця функція спочатку перевіряє відкриті сесії, якщо жодна сесія не відкрита, запускає її. Рекомендується помістити виклик session_start() початок сторінки. Змінні сеансу зберігаються в асоціативному масиві з ім’ям $_SESSION[]. Доступ до цих змінних можна отримати під час сесії.

У наступному прикладі ми спочатку відкриваємо сесію, потім реєструється змінну з ім’ям counter, яка збільшується кожен раз, коли сторінка відвідується під час сеансу. Використовуйте функцію isset(), щоб перевірити, чи встановлено вже мінлива сесії чи ні. Помістіть цей код у файл test.php і завантажте файл кілька разів, щоб побачити результат:

Setting up a PHP session

Цей код дає наступний результат: You have visited this page 1in this session.

Видалення сесії PHP

Сесія PHP може бути вилучена за допомогою функції session_destroy(). Для цієї функції не потрібні аргументи, і через один виклик можна видалити всі змінні сеансу. Якщо ви хочете видалити одну змінну сесії, ви можете використовувати функцію unset(), щоб відключити її. Нижче наводиться приклад, в якому скасовується одна змінна:

Виклик, який видаляє всі змінні сесії:

Включення авто-сесії

Вам не потрібно викликати функцію start_session(), щоб відкрити сесію, при відвідуванні користувачем сайту, якщо ви встановіть змінну session.auto_start у файлі php.ini.

Сесії без файлів cookie

У деяких випадках користувач не дозволяє зберігати файли на своєму комп’ютері. Тому існує інший спосіб відправки ідентифікатор сеансу в браузер.

В якості альтернативи ви можете використовувати константу SID, яка визначається, якщо запущений сеанс. Якщо клієнт не відправив відповідний сесії файл cookie, вона виглядає наступним чином session_name = session_id. В іншому випадку вона розширюється до порожнього рядка. Таким чином, ви можете вставляти її в URL-адреси. У наступному прикладі показано як правильно реєструвати змінну і як правильно посилатися на іншу сторінку з використанням SID.

To continue click following link

Цей код дає наступний результат —

You have visited this page 1in this session.
To continue click following link

При виведенні SID може використовуватися htmlspecialchars() з метою протидії атакам, пов’язаних з перехопленням сесій.