【问题标题】:CodeIgniter Log Out Could still access the page after logging out when back button is clicked or typed a shortcut linkCodeIgniter Log Out 在单击后退按钮或键入快捷链接时注销后仍然可以访问该页面
【发布时间】:2020-06-18 19:05:12
【问题描述】:

大家好,我问我如何解决这种问题。问题是当我在注销后单击后退按钮时,用户仍然可以访问该页面或键入该页面的链接。我想如果我可以销毁会话,它将自动禁用这些页面..

<?php defined('BASEPATH') OR exit('No direct script access allowed');
  class Auth extends MY_Controller {

   public function index(){

    $this->data['page_title'] = "User Login";
    $this->load->view('templates/master', $this->data);

     }
public function login(){
    $username = $_POST['username'];
    $password = $_POST['password'];
    $data = $this->User_model->login ($username, $password);
    if($data){  
    $this->session->set_userdata('users', $data);
    $session_data = array(
        'username' => $username);
    $this->session->set_userdata($session_data);
    redirect('users');

    }
    else{
        $this->session->set_flashdata
        ('loginfail','<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
        <strong>Danger !</strong> Invalid Email or Password .</div>');
       return redirect("auth");


    } 
}
public function logout()
{
    $this->session->unset_userdata(array('username','id'));
    $this->session->sess_destroy();
    redirect('auth');

}

}

<a href="<?php echo ('auth/logout')?>" data-toggle="modal" data-target="#logoutModal">
    <i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i>
    Logout
  </a>

我的主页控制器代码

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Users extends MY_Controller {

    function __construct() {
        if(empty($this->session->userdata('id'))){
            redirect('auth/logout');
        }
     }
    public function index()
    {
        $this->data['page_title'] = "Users List";

        $this->data['users'] = $this->User_model->get();
        $this->load->view('templates/master', $this->data);
    }

    public function add()
    {   
        $this->data['page_title'] = "Add User";

        $input_data = $this->input->post(); 

        if(!empty($input_data))
        {
            $this->User_model->insert($input_data);
            redirect('/users');
        } else {
            $this->load->view('templates/master', $this->data);
        }

    }



    public function edit($id)
    {
        $this->data['page_title'] = "Edit User";

        $input_data = $this->input->post(); 

        if(!empty($input_data)){
            $this->User_model->update($input_data);
            redirect('/users');
        } else {
            $this->data['users'] = $this->User_model->get($id);
            $this->load->view('templates/master', $this->data);
        }
    }

    public function delete($id)
    {
        $this->User_model->delete($id);
        redirect('/users');
    }
}

我的核心控制器代码

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class MY_Controller extends CI_Controller {

    protected $data;

    public function __construct()
    {
        parent::__construct();

        define('CONTROLLER', $this->router->fetch_class());
        define('METHOD', $this->router->fetch_method());

    }

}

【问题讨论】:

    标签: php codeigniter authentication session logout


    【解决方案1】:

    注销和登录工作正常...

    但您必须限制或授予您的功能

    例子

    public function isLoggedIn() {
            if ($this->session->userdata('uId') == TRUE) {
                return true;
            } else {
                return false;
            }
        }
    
    public function index() {
    
        $status = $this->session->userdata('uStatus');
        if ($this->isLoggedIn() == TRUE && $status == "1") {
    
           //your code here
    
        } else {
            $this->session->set_flashdata('error', 'You have to login first');
            redirect('login');
        }
    }
    

    【讨论】:

      【解决方案2】:

      是的,您必须退出用户会话。您必须在控制器的构造函数中检查用户会话。

      例子:

      class Users extends MY_Controller {
         function __construct() {
             if(empty($this->session->userdata())){
                redirect('LOGIN_CONTROLLER');
             }
          }
      }
      

      【讨论】:

      • 我在注销后完全破坏了会话,但是当我单击后退按钮时,页面将重定向到该页面并且会话再次开始
      • 如果我注销后点击返回,它将再次链接到我的主页。
      • 我更新了顶部的代码,这是我的主页控制器代码
      • 看来您还没有在用户控制器中添加构造函数。所以请添加并让我知道。
      • 解析错误:语法错误,第 6 行 C:\Users\Carl\Documents\agscontek\application\controllers\users.php 中的意外 '{' 遇到 PHP 错误严重性:解析错误消息: 语法错误,意外的 '{' 文件名:controllers/users.php 行号:6 回溯:
      【解决方案3】:

      你应该重定向

          if(empty($this->session->userdata('id'))){
           redirect('LOGIN_CONTROLLER/METHOD_NAME_HERE');
         }
      

      【讨论】:

      • 错误未显示,但页面显示页面未正确重定向
      猜你喜欢
      • 2013-11-08
      • 1970-01-01
      • 2014-05-13
      • 2021-11-02
      • 2016-01-20
      • 2021-10-17
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多