PHP Manual

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

2019-11-06T16:06:18.000Z

Obsah článku

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

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

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

session_start();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

unset($_SESSION);

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

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

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

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

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

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

// тепер сервер буде тримати сесію до 3600 секунд = 1 година
ini_set('session.gc_maxlifetime', '3600');
// усі клієнти (браузери) будуть
// сесія відправлена з терміном дії рівно 3600 секунд
session_set_cookie_params(3600);
session_start(); // ми можемо розпочати сесію!

Jan Barášek   Ví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:

Související články

1.
5.
Status:
All systems normal.
2025