(PHP 7 >= 7.1.0, PHP 8)
session_create_id — Создаёт новый идентификатор сессии
Функция session_create_id() создаёт новый идентификатор текущей сессии. Функция возвращает идентификатор сессии без коллизий.
При неактивной сессии проверка на коллизии опускается.
Функция создаёт идентификатор сессии, который соответствует настройкам файла конфигурации php.ini.
Скрипт, который содержит задание по сборке мусора, требуется запускать с тем же идентификатором пользователя, от имени которого запускается процесс веб-сервера. Несовпадение идентификаторов вызывает проблемы с разрешениями, которые острее остальных проявляются при работе дескриптора сохранения файлов.
prefix
Функция добавит префикс prefix
в начало
нового идентификатора сессии, если параметр prefix
указали.
Не каждый символ разрешается указывать в идентификаторе сессии.
В идентификаторе сессии допускаются только символы из диапазона: [a-zA-Z0-9,-]
.
Максимальная длина идентификатора — 256 символов.
Функция session_create_id() возвращает новый идентификатор текущей сессии
без коллизий. Функция не проверяет идентификатор на коллизии
при неактивной сессии.
Функция возвращает false
, если возникла ошибка.
Пример #1 Пример использования функции session_create_id() с функцией session_regenerate_id()
<?php
// Функция запуска сессии с поддержкой управления сессиями на основе временны́х меток
function my_session_start()
{
session_start();
// Не разрешать слишком старый идентификатор сессии
if (!empty($_SESSION['deleted_time']) && $_SESSION['deleted_time'] < time() - 180) {
session_destroy();
session_start();
}
}
// Функция обновления идентификатора сессии
function my_session_regenerate_id()
{
// Вызываем функцию session_create_id(), пока сессия активна, чтобы гарантировать,
// что не возникнет коллизий
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
// ВНИМАНИЕ: Никогда не указывайте как префикс конфиденциальные строки!
$newid = session_create_id('myprefix-');
// Устанавливаем временну́ю метку удаления данных текущей сессии.
// По ряду причин данные активной сессии не нужно удалять сразу
$_SESSION['deleted_time'] = time();
// Записываем данные сессии и завершаем её
session_write_close();
// Убедимся, что PHP принимает пользовательский идентификатор сессии
// ЗАМЕЧАНИЕ: Разработчики PHP рекомендуют включать опцию use_strict_mode, чтобы защитить приложение от уязвимостей
ini_set('session.use_strict_mode', 0);
// Устанавливаем новый пользовательский идентификатор сессии
session_id($newid);
// Запускаем сессию с пользовательским идентификатором
session_start();
}
// Убеждаемся, что включили строгий режим сессий, который устанавливает опция use_strict_mode.
// Опция use_strict_mode обязательна по соображениям безопасности
ini_set('session.use_strict_mode', 1);
my_session_start();
// Идентификатор сессии требуется генерировать, когда:
// - Пользователь вошёл в систему
// - Пользователь вышел из системы
// - По прошествии конкретного периода времени
my_session_regenerate_id();
// С этого места пишем полезный код программы
?>