<?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();
// С этого места пишем полезный код программы
?>