CodeIgniter Log Out 在单击后退按钮或键入快捷链接时注销后仍然可以访问该页面

Posted

技术标签:

【中文标题】CodeIgniter Log Out 在单击后退按钮或键入快捷链接时注销后仍然可以访问该页面【英文标题】:CodeIgniter Log Out Could still access the page after logging out when back button is clicked or typed a shortcut link 【发布时间】: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());

    


【问题讨论】:

【参考方案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');
   

【讨论】:

错误未显示,但页面显示页面未正确重定向

以上是关于CodeIgniter Log Out 在单击后退按钮或键入快捷链接时注销后仍然可以访问该页面的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 按下注销按钮并禁用后退浏览器按钮

如何修复CodeIgniter-3中没有工作的会话

在导航控制器中单击后退按钮时调用哪个方法?

XCUITest - 单击后退按钮后,除了睡眠之外,我还能使用啥来在屏幕上查找项目?

Android:为EditText打开键盘时处理后退按钮单击

单击两次后退按钮以退出活动