Создаёт новый идентификатор сессии

# session_create_id

(PHP 7 >= 7.1.0, PHP 8)

session_create_id — Создаёт новый идентификатор сессии

### Описание

function session_create_id(string `$prefix` = ""): string|false

Функция 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();

    // С этого места пишем полезный код программы

    ?>

### Смотрите также

- session_regenerate_id() - Генерирует и обновляет идентификатор текущей сессии
- session_start() - Начинает или возобновляет сессию
- session.use_strict_mode
- SessionHandler::create_sid() - Возвращает новый идентификатор сессии

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open