我正在尝试注销登录用户。 但它没有工作,在注销后,我也得到了会话数据。
下面是我的代码。请看看。
public function logout() {
if ($this->session->userdata('login') == "true") {
$current_user_data = $this->session->userdata('current_user_data');
$type = $current_user_data['type'];
$user_id = $current_user_data['user_id'];
$token = $current_user_data['token'];
$logout = $this->school->logout($type, $user_id, $token);
if (!empty($logout)) {
//echo $logout->responseCode;
if ($logout->responseCode == 200 || $logout->responseCode == 419) {
$this->session->sess_destroy();
$this->clear_cache();//clear the cache after logout //
redirect('login');
} else {
//$error['code']=json_encode(array('responseCode' => '500', 'response' => array('message' => 'error', 'statusReason' => 'internal_server_error')));
$url = "error/error_type/500";
redirect($url);
}
} else {
//echo "invalid token";
$url = "error/error_type/401";
redirect($url);
}
} else {
redirect('login');
}
}
它也会遇到条件,但会话并没有破坏。
这里有什么问题吗?
谢谢
答案 0 :(得分:0)
sess_destroy()
会破坏所有会话,甚至是闪存会话。为什么不使用简单的功能。我试过这个,它在我的情况下起作用。我创建了一个名为userdata的会话,它将在登录时获取用户凭据。这是我的退出功能。
/**
* to logout the current session
*/
public function logout() {
$this->session->unset_userdata('user_login');
$this->load->view('index.php');
}
如果你想破坏会话数据,这应该也可以正常工作, 再进一步参考https://www.codeigniter.com/user_guide/libraries/sessions.html
答案 1 :(得分:0)
尝试使用此方法注销
<?php
class Logout extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->helper(array('url','html'));
$this->load->library('session');
$this->load->database();
$this->load->model('users_model');
}
function index()
{
$user_data = $this->user_model->get_user_by_id($this->session->userdata('id'));
foreach ($user_data as $key => $value) {
if ($key != 'session_id' && $key != 'ip_address' && $key != 'user_agent' && $key != 'last_activity') {
$this->session->unset_userdata($key);
}
}
$this->session->sess_destroy();
redirect('Welcome', 'refresh');
}
}