Codeigniter中的奇怪注销问题

时间:2016-07-27 10:50:15

标签: php codeigniter

为了防止在codeigniter中进行缓存,我正在使用

<?php
header('Expires: Sun, 01 Jan 1995 00:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');    
header('Pragma: no-cache');
?>

在注销时,我取消设置会话数据并销毁会话

    $this->session->unset_userdata('logged_in');
    $this->session->unset_userdata('name');
    $this->session->sess_destroy();
    redirect('user/login');

当我第一次按下后退按钮时,只会显示登录页面而不会显示其他访问页面。所以我认为no-cache正在运行。

但如果我一直按下后退按钮,则确认表单重新提交页面出现,当我刷新页面时,主页显示出来。会话数据“名称”用于显示用户名,并显示为空白。

我在所有控制器功能上使用以下代码来阻止访问

if(!$this->user->is_logged_in()) {
        redirect('user/login');
    }

定义在模型中

public function is_logged_in()
{
    return $this->session->userdata('logged_in') ? TRUE : FALSE;
}

请指导我解决此问题。

2 个答案:

答案 0 :(得分:0)

  
    

每个控制器检查SESSION都设置为TRUE。如果为TRUE,则继续将代码重定向到登录页面。

  

在控制器中

public function index()
{

    $logged = $this->session->userdata('logged_in');
    if($logged == TRUE)
    {
        # Your code 
    }
    else{
        # redirect login page
        redirect('login');

    }
}

登录功能

$newdata = array(
    'username'  => $value,
    'logged_in' => TRUE
);

$this->session->set_userdata($newdata);

并且摧毁这样的集合。

$this->load->driver('cache');
$this->session->sess_destroy();
$this->cache->clean();
redirect('login');
ob_clean();

答案 1 :(得分:0)

我在一个项目中遇到了同样的问题,但这件事帮助了我。我在上面说的行上更改了config / config.php文件

$ config ['sess_regenerate_destroy'] =否;

我更改为TRUE,它解决了我的问题。