我使用的是codeigner-3.0.4。当用户提供有效的电子邮件id和密码时,我在login_controller中加载displaySorted函数。check_database方法为我做到了这一点,我在那里设置了自己的$sess_array,如下代码所示。这是我的登录控制器。
function __construct()
{
parent::__construct();
$this->load->model('user_model','',TRUE);
}
public function index()
{
//$this->load->model('user_model');
$this->load->view('login_view');
}
我在这个控制器中的登录和检查数据库功能
function login()
{
$this->form_validation->set_rules('login_email', 'Email');
$this->form_validation->set_rules('password', 'Password','callback_check_database');//calling the check_database function
if($this->form_validation->run() == FALSE)
{
//Field validation failed. User redirected to login page
$this->load->view('login_view');
}
else
{
//$this->displayDatabase();
//$this->load->view('adminPanel_view') ;
//echo true;exit;
redirect('login_controller/displaySorted');
}
}
function check_database()
{
//Field validation succeeded. Now Validating against database
$email = $this->input->post('login_email');
$password = $this->input->post('password');
//echo "$email $password"; exit;
//query the database
$result = $this->user_model->login($email, $password);
if($result)
{
$sess_array = array();
foreach($result as $row)
{
$sess_array = array(
'id' => $row->ID,
'login_email' => $row->email,
'logged_in' => 1
);
$this->session->set_userdata($sess_array);
}
return TRUE;
}
else
{
$this->form_validation->set_message('check_database', 'Invalid Email or password');
return false;
}
}
我在显示器中使用这个排序函数:
function displaySorted($sortBy = 'DeviceName',$sortOrder = 'asc',$offset=0)
{
$dataS = $this->session->userdata();
if(isset($dataS))
{
//somecode here
}
else
{
//redirect to login here
}
最后是我的注销功能
function logOut(){
//echo 'Logout';exit;
//$this->session->set_userdata('logged_in',FALSE);
$this->session->unset_userdata($sess_array);
//$this->session->sess_destroy();
redirect('login_controller/login', 'refresh');
}
我无法用这个方法销毁$ses_array。我也使用了一些其他东西,但当我在浏览器中按下后退按钮时,我可以看到我的displaySorted功能,这对我来说不应该是可见的。我在codeigniter文档中读到,我不能在unset_userdata()方法中传递关联数组。我该怎么办?
在check_database
函数中设置会话,尝试如下
$this->session->set_userdata('logged_in', $sess_array);
则在logout
函数中取消设置会话,尝试
$this->session->unset_userdata('logged_in');
在__construct()
功能中,使用此功能可以防止点击后退按钮登录
public function __construct()
{
parent::__construct();
if ($this->session->userdata('logged_in') == FALSE) {
redirect('auth/login', 'refresh');//where are you want to redirect controller function
}
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
}