Сесії - серверні файли cookie в PHP

6. 11. 2019

Часто нам потрібно зберігати більше інформації в cookies, але максимальний ліміт для файлів cookie - 4 кБ, що не так вже й багато. Сесії вирішують цю проблему, зберігаючи дані на веб-сервері, а в браузері клієнта зберігається лише короткий ідентифікатор, який дозволяє визначити, які дані належать якому клієнту.

Початок сесії

Перш ніж робити якусь роботу з сеансами, треба їх спочатку запустити. Це робиться шляхом виклику функції session_start() в самому початку скрипта:

php
session_start();

Суворе попередження: перед викликом функції session_start() не повинно виконуватись жодного виводу в HTML-код!

Безпека сесії

Вміст сесії зберігається на сервері, а клієнтському браузеру надсилається лише ідентифікатор, тому користувач не має можливості дізнатися, що зберігається в сесії. Єдиний спосіб, яким скрипт може вплинути на користувача - це видалити ідентифікатор (після чого скрипт згенерує новий).

Oтримання даних з сесії

Всі сесії зберігаються в суперглобальній змінній $_SESSION і можуть бути переглянуті як масив.

Наприклад, ім'я користувача, що увійшов до системи, можна отримати за записом:

php
echo $_SESSION['користувач'];

Примітка: Сесія може існувати не завжди (наприклад, якщо ви новий користувач). Тому ми завжди повинні перевіряти наявність помилки перед розміщенням і пропонувати альтернативне повідомлення про помилку, якщо це необхідно.

php
if (isset($_SESSION['користувач']) && $_SESSION['користувач']) {
echo 'Aвторизований користувач:' . $_SESSION['користувач'];
} else {
echo 'Ніхто не записався.';
}

Збереження даних у сесії

Збереження відбувається як просте збереження даних у змінну:

php
$_SESSION['користувач'] = 'Хонзік';

Веб-сервер подбає про технічне забезпечення коректного зберігання на сервері та відправлення ідентифікатора користувачеві.

Видалення сесій

Oкремі значення можуть бути видалені окремо відповідно до ключа:

php
unset($_SESSION['користувач']);

Aбо ж всі доступні сесії:

php
unset($_SESSION);

Примітка: Видалення конкретного сеансу не очищає значення ключа, а повністю видаляє ключ. Тому при спробі зчитування неіснуючого ключа буде видано попередження про помилку. Ми завжди можемо легко перевірити наявність ключа за допомогою функції isset().

Максимальний термін дії сесії

Кожна збережена сесія має ліміт часу, протягом якого вона буде зберігатися на сервері. PHP безпосередньо містить скрипт cron, який періодично видаляє старі сесії.

За замовчуванням зазвичай використовується "1440 секунд", що становить "24 хвилини".

Підвищення вартості потрібно зробити в 2 місцях:

Використання в PHP:

php
// тепер сервер буде тримати сесію до 3600 секунд = 1 година
ini_set('session.gc_maxlifetime', '3600');
// усі клієнти (браузери) будуть
// сесія відправлена з терміном дії рівно 3600 секунд
session_set_cookie_params(3600);
session_start(); // ми можемо розпочати сесію!
Jan Barášek
Jan BarášekVíce o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Newsletter

Nejlepsi tipy a triky o PHP do Vaseho e-mailu. Clanky a novinky nejen ze sveta PHP a programovani.