Вы можете хранить данные с помощью файлов cookie, но из-за этого могут возникнуть некоторые проблемы с безопасностью. Поскольку файлы cookie хранятся на компьютере пользователя, злоумышленник может легко изменить содержимое файлов cookie, чтобы вставить в ваше приложение потенциально опасные данные, которые могут нарушить работу вашего приложения.
Кроме того, каждый раз, когда браузер запрашивает URL-адрес на сервере, все данные cookie для веб-сайта автоматически отправляются на сервер в запросе. Это означает, что если вы сохранили 5 файлов cookie в системе пользователя, каждый размером 4 КБ, браузеру необходимо загружать 20 КБ данных каждый раз, когда пользователь просматривает страницу, что может повлиять на производительность вашего сайта.
Вы можете решить обе эти проблемы, используя сессии PHP. Сессии PHP хранят данные на сервере, а не на компьютере пользователя. В сессии каждый пользователь идентифицируется с помощью уникального номера, называемого идентификатором сеанса или SID. Этот уникальный идентификатор сеанса используется для связи каждого пользователя с его собственной информацией на сервере, такой как электронные письма, сообщения и т. д.
Идентификаторы сеанса генерируются механизмом PHP случайным образом, который практически невозможно угадать. Кроме того, поскольку данные сеанса хранятся на сервере, их не нужно отправлять с каждым запросом браузера.
Запуск сессии в PHP
Прежде чем вы сможете сохранить какую-либо информацию в переменных сессии, вы должны сначала ее запустить. Чтобы начать новую сессию, просто вызовите PHP-функцию session_start()
. Она создаст новый сеанс и сгенерирует уникальный идентификатор сеанса для пользователя.
Код PHP в приведенном ниже примере просто запускает новую сессию.
<?php
// Начало сессии
session_start();
?>
Функция session_start()
сначала проверяет, существует ли уже сессия через проверку наличия идентификатора. Если она его находит, то есть если сессия уже запущена, оно устанавливает переменные сессии, а если нет, она запускает новую сессию, создавая новый идентификатор.
Вы должны вызвать функцию session_start()
в начале страницы, то есть до любого вывода, сгенерированного вашим скриптом в браузере, так же, как вы это делаете при установке файлов cookie с помощью функции setcookie()
.
Хранение и доступ к данным сессии
Вы можете хранить все данные сессии в виде пар ключ-значение в суперглобальном массиве $_SESSION[]
. Доступ к сохраненным данным можно получить в течение всей сессии. Рассмотрим следующий сценарий, который создает новую сессию и зарегистрирует две переменные.
<?php
// Начало сессии
session_start();
// Хранение данных сессии
$_SESSION["firstname"] = "Peter";
$_SESSION["lastname"] = "Parker";
?>
Чтобы получить доступ к данным сессии, которые мы установили в нашем предыдущем примере с любой другой страницы в том же веб-домене — просто воссоздайте сессию, вызвав session_start()
, а затем передайте соответствующий ключ в ассоциативный массив $_SESSION
.
<?php
// Начало сессии
session_start();
// Доступ к данным сессии
echo 'Hi, ' . $_SESSION["firstname"] . ' ' . $_SESSION["lastname"]; // Выводит: Hi, Peter Parker
?>
Для доступа к данным сеанса на той же странице нет необходимости воссоздавать сеанс, поскольку он уже был запущен в верхней части страницы.
Уничтожение сессии
Если вы хотите удалить определенные данные сессии, просто удалите соответствующий ключ ассоциативного массива $_SESSION
, как показано в следующем примере:
<?php
// Начало сессии
session_start();
// Удаление данных сессии
if(isset($_SESSION["lastname"])){
unset($_SESSION["lastname"]);
}
?>
Однако, чтобы полностью уничтожить сессию, просто вызовите функцию session_destroy()
. Эта функция не требует аргументов, и один вызов уничтожает все данные сессии.
<?php
// Начало сессии
session_start();
// Уничтожение сессии
session_destroy();
?>
Перед тем, как уничтожить сессию с помощью функции session_destroy()
, вам нужно сначала ее создать, если ее еще нет, с помощью функции session_start()
, чтобы было что уничтожать.
Каждая сессия PHP имеет значение тайм-аута — продолжительность, измеряемую в секундах, — которая определяет, как долго сессия должна оставаться активной при отсутствии каких-либо действий пользователя. Вы можете настроить этот тайм-аут, изменив значение переменной session.gc_maxlifetime
в файле конфигурации PHP (php.ini
).