Я использую сеанс в приложении Laravel с функцией входа в систему.

Сессия хранится в БД.

Сеанс моего приложения генерирует имя сеанса «laravel_session».

Возможно, это имя по умолчанию. (Проверял в отладчике chrome.)

Я думал, что это может вызвать фиксацию сеанса.
Итак, я использую session->regenerate() после входа в систему.
Однако он снова генерирует "laravel_session". Работает?
Я проверил таблицу сеансов после session->regenerate() и обнаружил, что столбец "id" изменен.

0
user3119018 13 Сен 2018 в 18:00

2 ответа

Лучший ответ

Существует огромная разница между session_name() (именем файла cookie) и session_id() (которое должно быть случайным, непредсказуемым значением).

Название вашей сессии известно всем. Это идентификатор сеанса, который должен быть секретным.

(Думайте об этом как о паре key => value.)

В любом случае, цель директивы конфигурации session_regenerate_id(true); и use_strict_mode - уменьшить проблемы с фиксацией сеанса. Вы всегда должны повторно создавать идентификаторы сеанса, когда пользователь меняет уровень своих привилегий (вход в систему, выход из системы и т. Д.).

3
Scott Arciszewski 14 Сен 2018 в 13:42

Laravel уже содержит встроенные средства защиты от фиксации сеанса, а также встроенную функцию, позволяющую сделать это самостоятельно:

https://laravel.com/docs/5.6/session

Laravel автоматически восстанавливает идентификатор сеанса во время аутентификации, если вы используете встроенный LoginController; однако, если вам нужно вручную восстановить идентификатор сеанса, вы можете использовать метод регенерации.

$request->session()->regenerate();
1
ceejayoz 14 Сен 2018 в 14:39