php session_regenerate_id (). Правильный ли пример для php. net? - PullRequest
0 голосов
/ 03 августа 2020

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 в течение нескольких лет, и никто не прокомментировал это, я полагаю, что это неправильно. Но я надеюсь, что кто-нибудь сможет объяснить мне, чего мне не хватает. Заранее большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...