Версия для печати. Взято с сайта phpsql.ru

На главную   Назад   Вперед

Что такое сессии PHP и как они работают

Протокол HTTP является протоколом "без сохранения состояния". То есть не имеет встроенной возможности поддерживать сеанс работы с сайтом.

Представьте интернет-магазин. Пользователь выбирает товар, кладет его в корзину, а затем оплачивает. Для оформления покупки нужно посетить несколько страниц. Причем сайт должен понимать, что это один и тот же пользователь, а также запоминать товары, которые он отложил в корзину.

Для решения таких задач в PHP реализован механизм поддержки сессий. Если есть необходимость запоминать состояние сеанса, все, что нужно сделать - вызвать в начале скрипта функцию session_start().

session_start();
Эта функция проверит, существует ли идентификатор сессии. Если нет, то он будет выделен и создастся файл, в котором можно будет сохранять информацию, актуальную в рамках сессии (например, список товаров в корзине).
Но где искать этот самый идентификатор сессии?
PHP предлагает два механизма:
1. хранить идентификатор сессии в куках
2. добавлять идентификатор сессии к внутренним ссылкам в качестве параметра URL
Последний вариант имеет смысл только тогда, когда в браузере отключены cookies. Он нехорош тем, что внутренние ссылки станут выглядеть очень некрасиво. Например, ссылка
index.php?page=main
превратится в
index.php?page=main&PHPSESSID=1dc9fcb731a123ec16fb2e49ece325ed

Я рекомендую пользоваться только первым вариантом. Сейчас все современные браузеры поддерживают работу с cookies и можно смело полагаться, что сессии на вашем сайте будут работать с их помощью. Если пользователь отключил cookies в браузере, можно считать, что ему не нужна поддержка сеансов работы с веб-сайтами.
Информация, актуальная в рамках сессии, хранится в системной переменной (словаре)
$_SESSION. Вот так можно сохранить данные:
$_SESSION["username"] = "Vasya";
А вот так прочитать:
echo "Привет, " . $_SESSION["username"] . '!';

Когда сессия больше не нужна, например, пользователь нажал кнопку "Выход", следует уничтожить ее. Для этого существует функция session_destroy(). Однако перед ее вызовом нужно удалить все сохраненные в сессии данные. Например, вот так:
unset($_SESSION['username']);
session_destroy();

 
Предыдущая   На главную   Следующая