编辑:
我太伤心了,这个问题被低估了,我被这个困了好几个小时。我希望有一个可爱的炼金术士可以让我从debuff条件中恢复过来。
我正在使用codeigniter,我认为问题是当新会话(带有flash消息的会话)被设置时,会话ID(作为cookie)不会发送到客户端,因此重定向到其他页面后,创建一个全新的会话。
我的退出功能出现问题。逻辑只需单击“注销”,使用flash消息重定向到索引页面 - 您已经注销。
经过检查,我发现了这些东西:旧会话清除没有问题,新会话在重定向之前创建,新会话确实有flash消息。然后奇怪的事情发生,当重定向到索引时,创建一个新的更新的会话。 但是,如果我在添加Flash消息后没有运行重定向,并点击浏览器的刷新,那么手动转到索引,带有flash消息的会话就会出现并完美显示。
我在重定向或刷新浏览器之前也找到了,虽然重新创建了会话,但我的cookie中没有会话ID。刷新操作将会话ID发送到我的cookie。
我希望我明白这个问题。谢谢。
//auth controller
public function logout()
{
$this->my_auth_lib->logout();
$this->session->set_flashdata('alert','You have been logged out!');
redirect('index');
}
//my_auth_lib
public function logout()
{
return $this->session->sess_destroy();
}
// session library sess_destory method
public function sess_destroy()
{
// get session name.
$name = session_name();
if (isset($_COOKIE[$name])) {
// Clear session cookie
$params = session_get_cookie_params();
setcookie($name, '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
unset($_COOKIE[$name]);
}
$this->sess_create();
}
//session library sess_create method
public function sess_create()
{
$_SESSION[$this->sess_namespace] = array(
'session_id' => md5(microtime()),
'last_activity' => time()
);
// Set matching values as required
if ($this->_config['sess_match_ip'] === true) {
// Store user IP address
$_SESSION[$this->sess_namespace]['ip_address'] = $this->ci->input->ip_address();
}
if ($this->_config['sess_match_useragent'] === true) {
// Store user agent string
$_SESSION[$this->sess_namespace]['user_agent'] = trim(substr($this->ci->input->user_agent(), 0, 50));
}
$this->store = $_SESSION[$this->sess_namespace];
}