У меня есть приложение codeigniter, где сеанс устанавливается, когда пользователь входит в систему, и отображается панель пользователя с кодом, похожим на приведенный ниже код:
public function checkLogin()
{
$username = $this->input->post("username");
$password = $this->input->post("password");
$userId = $this->ModelLogin->checkLogin($username, $password);
if ($userId) {
$session_data = array(
'is_logged_in' => true,
'userId' => $userId,
);
$this->session->set_userdata($session_data);
redirect("/user/dashboard");
} else {
$this->session->set_flashdata('login_error', "Incorrect username/password");
}
}
Теперь я должен исправить проблему Session Fixation путем регенерации идентификатора сессии перед аутентификацией пользователя. Когда я включаю session_regenerate_id()
или даже функцию $this->session->sess_regenerate()
, специфичную для кодового указателя, она работает внутри этой функции, но как только она перенаправляется на /user/dashboard
, данные сеанса становятся пустыми.
Я добавляю линию регенерата как раз перед $this->session->set_userdata($session_data);
. Приведенный выше код прекрасно работает без регенерата.
Кроме того, я использую драйвер сеанса database . Когда я переключаюсь на драйвер файлов, даже логика регенерации работает отлично. Это просто что-то с драйвером базы данных (я чувствую) вызывает эту проблему.