Введение
Мы уже умеем сохранять информацию для пользователя между посещениями страницы с помощью кук. Но зачем нам ещё и сессии?
Сессии, они же сеансы, это, по сути, просто удобная обёртка над куками. Они также позволяют хранить данные пользователя, но с некоторыми отличиями. Доступный объём для хранения информации намного больше.
Сессии представляют набор переменных, которые хранятся на сервере (либо часть на сервере, а часть – в cookie браузера) и которые относятся только к текущему пользователю.
Для запуска сессии необходимо вызвать функцию session_start(). Она должна вызываться до отправки ответа пользователю:
<php session_start(); ?>
При запуске сессии с помощью функции session_start()
, если пользователь первый раз заходит на сайт, PHP назначает ему уникальный идентификатор сессии. Этот идентификатор с помощью cookie, которые по умолчанию называются “PHPSESSID”, сохраняется в браузере пользователя. С помощью этого идентификатора пользователь ассоциируется с данными сессии. Если для пользователя уже установлена сессия, то данная функция продлевает текущую сессию вместо установки новой.
С помощью специальных функций мы можем получить идентификатор сессии:
session_start();
echo session_id(); // идентификатор сессии
echo session_name(); // имя - PHPSESSID
То же значение мы могли бы получить, обратившись к cookie напрямую:
echo $_COOKIE["PHPSESSID"];
Запись и чтение информации при использовании сессий выглядит просто как работа со специальным массивом $_SESSION
.
$_SESSION['user']['id'] = $id;
Сохранение данных в сессии
Запустим сессию и сохраним в ней значения:
<php
session_start();
$_SESSION["name"] = "Sam";
$_SESSION["age"] = 41;
echo "Данные сохранены в сессии";
?>
После установки сессии в браузере мы сможем заметить установку специальной куки, которая по умолчанию называется “PHPSESSID”:
Получение данных сессии
Теперь получим эти значения и выведем на страницу:
session_start();
if (isset($_SESSION["name"]) && isset($_SESSION["age"]))
{
$name = $_SESSION["name"];
$age = $_SESSION["age"];
echo "Name: $name <br> Age: $age";
}
Удаление данных сессии
Сессия уничтожается с закрытием браузера, однако мы также можем программно удалить либо какие-то отдельные, либо все данные сессии.
Для удаления одной переменной из сессии применяется функция unset():
session_start();
unset($_SESSION["age"]); // удаляем из сессии переменную "age"
Если на сайте есть вход, то должен быть и выход. Таким выходом будет специальный сценарий, который очистит сессию и переадресует на главную страницу. Удалить все данные сессии можно с помощью функции session_destroy():
session_start();
session_destroy();