Создание и удаление сессий в PHP. Каким образом в них сохраняются данные?

создание и удаление сессий в php.  каким образом в них сохраняются данные?

Создание сессии

Общий принцип работы сессий рассматривался в прошлом уроке. Из него стало ясно, что PHP связывает данные, хранимые на сервере, и конкретного пользователя с помощью записи уникального идентификатора в cookie. Все сессионные данные доступны через суперглобальный массив $_SESSION. Однако прежде чем осуществлять запись или чтение данных из него, нужно явным образом создать сессию.

В PHP есть специальная функция session_start(). Она осуществит проверку присланных заголовков HTTP-запроса на наличие cookie с идентификатором сессии. Если идентификатор отсутствует, будет создана новая сессия, иначе функция откроет обработчики чтения-записи и синхронизирует текущие сеансовые данные с массивом $_SESSION. Функция возвращает булево значение true в случае успешного завершения, а false, если произошли ошибки.

Как вы уже знаете, настройка сессий происходит с помощью конфигурационного файла php.ini. Для этого используется ряд директив, с полным списком которых вы ознакомитесь на странице официальной документации. Начиная с версии PHP 7.0 эти настройки могут быть переопределены динамически за счет передачи в функцию session_start() массива, ключами которого являются имена директив без слова session (см. пример).

//если пользователь не будет 10 секунд посылать запросы
//на сервер, его сессия будет автоматически удалена
session_start(['gc_maxlifetime' => 10]);

if (isset($_SESSION['isStarted'])) {
    $difference = time() - $_SESSION['startTime'];
    echo "От старта сессии прошло {$difference}сек";

} else {
    $_SESSION = [
        'isStarted' => true,
        'startTime' => time()
    ];

    echo 'Создана новая сессия';
}

Заметка
Параметр функции session_start() является необязательным. На практике необходимость переопределения каких-либо настроек не встречается. Мы считаем, что изменение конфигурации при создании сессии запутывает программный код. Множество программистов привыкли к тому, что все настройки интерпретатора можно получить в одном месте — файле конфигурации.

Сохранение данных

Как говорилось выше, PHP автоматически привяжет суперглобальный массив $_SESSION к файлу на сервере или другому хранилищу, если вы переопределили его самостоятельно. Чтобы сделать информацию доступной при следующем запросе, просто запишите её в $_SESSION. Остальное интерпретатор сделает за вас. Явного сохранения данных требуется.

В случае необходимости сохранения информации, имеющей сложную структуру, используйте механизмы сериализации. Например, объект может быть превращен в строку с помощью функции serialize().

Удаление сессии

Если необходимо удалить сессию и все данные, связанные с ней, придется использовать небольшой хак. Сессия закрывается автоматически при выходе пользователя из браузера. Это происходит из-за того, что cookie, хранящая уникальный идентификатор, перестает существовать.

Вы можете уничтожить эту cookie и тем самым закрыть сессию досрочно. Обратите внимание на код, приведенный ниже. В нем вызываются две новые функции: session_name() - получение имени cookie, хранящей идентификатор сессии, session_destroy() - удаление всех данных из хранилища сессии.

//стартуем сессию чтобы получить хранимые в ней данные
session_start();

//удаляем сессию задав ей отрицательное время жизни
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time() - 60, '/');
}

//удаляем все связанные данные
session_destroy();

Последние публикации