Где поместить session_regenerate_id() в сценарий входа в PHP

Я создаю сценарий входа в систему, и мне нужно знать, куда именно я должен поместить функцию session_regenerate_id(), когда я хочу войти в систему пользователя. Как я это делаю, так:

    $user_id = $general->login($username, $password);

$_SESSION['user_id'] = $user_id;

Функция входа в систему возвращает автоинкрементный идентификатор пользователя в таблице, и я сохраняю его в переменной $_SESSION, как показано выше. Я показал только ту часть логики, в которой я использую переменную Session, потому что я просто знаю, куда мне следует поместить session_regenerate_id, чтобы избежать атаки фиксации сеанса. До или после того, как я назначу значение?

Вот так:

    session_regenerate_id(true); 

$_SESSION['user_id'] = $user_id;

Или после, вот так:

$_SESSION['user_id'] = $user_id;

    session_regenerate_id(true); 

Спасибо.

1 ответ

Решение

Это не имеет значения, если вы делаете это в том же запросе, что и сохранение идентификатора пользователя в сеансе (применяются стандартные ограничения, например, если вы не кэшируете свои выходные данные, вам не разрешено печатать любые символы перед выполнением session_regenerate_id), В любом случае, как вы это называете, другие пользователи не смогут использовать старый идентификатор сеанса для доступа к сеансу, в котором хранится user_id.

Из Основы управления сеансом:

session_regenerate_id() необходимо вызвать до установки информации аутентификации в $_SESSION.

Итак, вы должны поместить его перед $_SESSION.

Другие вопросы по тегам