Часто нам потрібно зберігати більше інформації в cookies, але максимальний ліміт для файлів cookie - 4 кБ, що не так вже й багато. Сесії вирішують цю проблему, зберігаючи дані на веб-сервері, а в браузері клієнта зберігається лише короткий ідентифікатор, який дозволяє визначити, які дані належать якому клієнту.
Перш ніж робити якусь роботу з сеансами, треба їх спочатку запустити. Це робиться шляхом виклику функції session_start()
в самому початку скрипта:
session_start();
Суворе попередження: перед викликом функції
session_start()
не повинно виконуватись жодного виводу в HTML-код!
Вміст сесії зберігається на сервері, а клієнтському браузеру надсилається лише ідентифікатор, тому користувач не має можливості дізнатися, що зберігається в сесії. Єдиний спосіб, яким скрипт може вплинути на користувача - це видалити ідентифікатор (після чого скрипт згенерує новий).
Всі сесії зберігаються в суперглобальній змінній $_SESSION
і можуть бути переглянуті як масив.
Наприклад, ім'я користувача, що увійшов до системи, можна отримати за записом:
echo $_SESSION['користувач'];
Примітка: Сесія може існувати не завжди (наприклад, якщо ви новий користувач). Тому ми завжди повинні перевіряти наявність помилки перед розміщенням і пропонувати альтернативне повідомлення про помилку, якщо це необхідно.
if (isset($_SESSION['користувач']) && $_SESSION['користувач']) {echo 'Авторизований користувач:' . $_SESSION['користувач'];} else {echo 'Ніхто не записався.';}
Збереження відбувається як просте збереження даних у змінну:
$_SESSION['користувач'] = 'Хонзік';
Веб-сервер подбає про технічне забезпечення коректного зберігання на сервері та відправлення ідентифікатора користувачеві.
Окремі значення можуть бути видалені окремо відповідно до ключа:
unset($_SESSION['користувач']);
Або ж всі доступні сесії:
unset($_SESSION);
Примітка: Видалення конкретного сеансу не очищає значення ключа, а повністю видаляє ключ. Тому при спробі зчитування неіснуючого ключа буде видано попередження про помилку. Ми завжди можемо легко перевірити наявність ключа за допомогою функції
isset()
.
Кожна збережена сесія має ліміт часу, протягом якого вона буде зберігатися на сервері. PHP безпосередньо містить скрипт cron, який періодично видаляє старі сесії.
За замовчуванням зазвичай використовується "1440 секунд", що становить "24 хвилини".
Підвищення вартості потрібно зробити в 2 місцях:
php.ini
задається максимальна тривалість дії, яку буде підтримувати сервер. Значення задається директивою session.gc_maxlifetime,Використання в 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:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | uk