从页面注销,按下浏览器的后退按钮不会显示受保护的页面

时间:2016-03-24 08:00:28

标签: php codeigniter

我正在使用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()方法中传递关联数组。我该怎么办?

1 个答案:

答案 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");

}