【发布时间】:2019-08-13 09:52:25
【问题描述】:
我有一个 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");
}
}
现在我要通过在验证用户之前重新生成会话 ID 来修复 会话修复 问题。当我包含session_regenerate_id() 甚至是codeigniter 特定的$this->session->sess_regenerate() 函数时,它可以在这个函数中工作,但是一旦它被重定向到/user/dashboard,会话数据就会变为空白。
我在 $this->session->set_userdata($session_data); 之前添加了 regenerate 行。上面的代码无需重新生成即可完美运行。
另外,我正在使用 database 会话驱动程序。当我切换到文件驱动程序时,即使重新生成逻辑也能完美运行。只是数据库驱动程序(我觉得)导致了这个问题。
【问题讨论】:
-
什么是php和codeigniter版本?
-
如果你没有在 PHP7 上使用最新的 CI,也许你可以像这样修复会话错误:stackoverflow.com/a/56355732/3929170
标签: php codeigniter