我正在使用codeigniter-3.0.4。当用户提供有效的电子邮件ID和密码时,我在login_controller中加载displaySorted函数。 check_database方法为我做了那个,我设置了自己的$ sess_array,如下面的代码所示。这是我的login_controller。
function __construct()
{
parent::__construct();
$this->load->model('user_model','',TRUE);
}
public function index()
{
//$this->load->model('user_model');
$this->load->view('login_view');
}
我在此控制器中的登录和check_database功能
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;
}
}
我在displaySorted函数中使用它:
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');
}
我无法使用此方法销毁$ sess_array。我也使用过其他一些东西但是当我按下浏览器内的后退按钮时,我可以看到我的displaySorted功能,这对我来说是不可见的。我在codeigniter文档中读到我无法在unset_userdata()方法中传递关联数组。我该怎么办?
答案 0 :(得分:0)
在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");
}