嗨,我正在尝试在codigniter中使用注销代码,由于某种原因,它无法正常工作。
这是我的注销代码:
public function Logout() {
$this->Login_model->saveLogout();
$this->session->sess_destroy();
redirect('Login');
}
这是我的模型代码:
public function saveLogout() {
$recordId=$this->session->userdata('user_id');
$ipaddress = $this->input->ip_address();
$dataLog = array(
'userid' => $recordId,
'entertime' => time(),
'ip' => $ipaddress,
'log_operation' => 'Logout'
);
$dataUser = array(
'previous_visit' => time(),
'lastip' => $ipaddress
);
$this->db->insert('log_table', $dataLog);
$this->db->set($dataUser); //value that used to update column
$this->db->where('id', $recordId); //which row want to upgrade
$this->db->update('users'); //table name
}
当我单击注销时,它显示以下错误
Column 'userid' cannot be null
INSERT INTO `log_table` (`userid`, `entertime`, `ip`, `log_operation`) VALUES (NULL, 1534252667, '::1', 'Logout')
任何人都可以帮我解决问题吗
谢谢。
答案 0 :(得分:2)
当您写$this->session->sess_destroy();
而没有任何条件检查之后再写时,它将在执行其他命令之前破坏会话。 类似于headers already sent
这样做
在控制器中
public function Logout() {
$return = $this->Login_model->saveLogout(); # alter
if(!$return)
{
echo "went wong"; die;
}
else
{
$this->session->sess_destroy();
redirect('Login');
}
}
在模型中
public function saveLogout() {
# your model code
return true; # add this
}