On https://www.php.net/manual/en/function.session-regenerate-id.php - это следующий пример использования session_regenerate_id () без потери данных сеанса в случае нестабильного соединения.
function my_session_start() {
session_start();
if (isset($_SESSION['destroyed'])) {
if ($_SESSION['destroyed'] < time()-300) {
// Should not happen usually. This could be attack or due to unstable network.
// Remove all authentication status of this users session.
remove_all_authentication_flag_from_active_sessions($_SESSION['userid']);
throw(new DestroyedSessionAccessException);
}
if (isset($_SESSION['new_session_id'])) {
// Not fully expired yet. Could be lost cookie by unstable network.
// Try again to set proper session ID cookie.
// NOTE: Do not try to set session ID again if you would like to remove
// authentication flag.
session_commit();
session_id($_SESSION['new_session_id']);
// New session ID should exist
session_start();
return;
}
Также существует функция my_session_regenerate_id () который определяет значения, как указано в приведенной выше функции.
function my_session_regenerate_id() {
// New session ID is required to set proper session ID
// when session ID is not set due to unstable network.
$new_session_id = session_create_id();
$_SESSION['new_session_id'] = $new_session_id;
// Set destroy timestamp
$_SESSION['destroyed'] = time();
// Write and close current session;
session_commit();
// Start session with new session ID
session_id($new_session_id);
ini_set('session.use_strict_mode', 0);
session_start();
ini_set('session.use_strict_mode', 1);
// New session does not need them
unset($_SESSION['destroyed']);
unset($_SESSION['new_session_id']);
Мой вопрос касается строки ниже в первой цитируемой функции
if ($_SESSION['destroyed'] < time()-300)
Я думаю, это должно быть
if ($_SESSION['destroyed'] > time()-300)
Или должен быть блок, объясняющий, что происходит, когда $ _SESSION ['уничтожено'] превышает 5 минут. Поскольку теперь ситуация такова, что старый идентификатор сеанса менее 5 минут приводит к исключению, когда старый идентификатор сеанса более 5 минут проходит без каких-либо проблем. Это кажется странным.
Мой вопрос: я вижу это неправильно или я прав? Поскольку пример находится на php. net в течение нескольких лет, и никто не прокомментировал это, я полагаю, что это неправильно. Но я надеюсь, что кто-нибудь сможет объяснить мне, чего мне не хватает. Заранее большое спасибо.