嘿,伙计们帮我从视图的所有页面注销。。当我点击登出链接时,我只从一个页面登出,而我正试图从另一个页面注销,这是不起作用的。我的cpntoller代码是:-
function index()
{
if($this->session->userdata('logged_in'))
{
$session_data = $this->session->userdata('logged_in');
$data['email'] = $session_data['email'];
$this->load->view('home_view', $data);
$this->load->view('home_content_view', $data);
}
else
{
//If no session, redirect to login page
redirect('login', 'refresh');
}
}
function logout()
{
$this->session->unset_userdata('logged_in');
session_destroy();
redirect('home', 'refresh');
}
首先,codeigniter不使用php本机会话,因此session_delete无法使用$this->session->sess_destroy()
。在每个控制器的构造函数中(如果您有多个控制器)。如果用户会话不存在,请检查该会话,然后将用户重定向到要显示的页面。
class Home extends CI_Controller
{
function __construct()
{
parent::__construct();
//this condition checks the existence of session if user is not accessing
//login method as it can be accessed without user session
if( !$this->session->userdata('logged_in') && $this->router->method != 'login' ) {
redirect('login');
}
}
function index()
{
$session_data = $this->session->userdata('logged_in');
$data['email'] = $session_data['email'];
$this->load->view('home_view', $data);
$this->load->view('home_content_view', $data);
}
function logout()
{
$this->session->userdata = array();
$this->session->sess_destroy();
redirect('home', 'refresh');
}
}
我建议您阅读CodeIgniter中的_remap()函数。我通常对登录/注销所做的是覆盖我的自定义控制器中的重映射,该控制器扩展了CI_controller,并执行以下操作:
function _remap($method)
{
if (method_exists($this, $method) && $this-my_custom_helper->is_logged_in())
{
$this->$method();
}
else
{
redirect('/auth/login/');
}
}
这样,您就不需要检查每个控制器中是否存在loggedin。另一件有用的事情是实现一个before/after过滤器,该过滤器在每个控制器中的操作之前运行。我不想详细介绍,但你可以在这里查看Jamie Rumbewer的MY_Controller。你可以从他的代码中采用一些不错的技术。祝你好运
在每个控制器的构造函数__construct
中放入以下方法。
我假设您在用户控制器的索引功能上有登录方法
if (FALSE !== $this->session->userdata('logged_in')) {
redirect('/user');
}
当用户单击注销按钮时,cal将转到控制器文件中的注销功能。
在该功能中
public function logout() {
$this->session->session_destroy();
redirect("home");
}
试试这个
function logout()
{
$this->session->unset_userdata($session_data);
$this->session->sess_destroy();
redirect('home', 'refresh');
}