English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP базовый учебник

PHP продвинутый учебник

PHP & MySQL

PHP справочник

PHP Session

В данном руководстве вы узнаете, как использовать PHP сеанс для временного хранения данных на сервере.

Что такое сеанс

Хотя вы можете использовать cookie для хранения данных, у них есть некоторые安全问题. Поскольку cookie хранятся на компьютере пользователя,攻击ер может легко изменить содержимое cookie, чтобы вставить вредоносные данные в ваше приложение, что может повредить ваше приложение.

Кроме того, при каждом запросе URL браузера к серверу, все данные cookie автоматически отправляются в запрос. Это означает, что если вы храните 5 cookie на системе пользователя, каждый размером 4 КБ, то браузеру необходимо загружать 20 КБ данных при каждом просмотре страницы, что может повлиять на производительность вашего сайта.

Вы можете решить эти проблемы с помощью PHP сеанса. PHP сеанс хранит данные на сервере, а не на компьютере пользователя. В среде, основанной на сеансе, каждый пользователь идентифицируется уникальным номером, называемым идентификатором сеанса или SID. Этот уникальный идентификатор сеанса используется для связывания каждого пользователя с его данными на сервере (например, электронной почтой, сообщениями и т.д.).

Совет:Идентификатор сеанса генерируется 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"];
?>

PHP-код в предыдущем примере генерирует следующий вывод.

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).