0

我想在 codeigniter 中管理页面重定向,我有两个控制器:

  1. 登录
  2. 登录

当用户在登录时尝试访问login页面时,他被重定向到Loggedin控制器

function __construct()
{
    parent::__construct();
    $u = $this->session->userdata('username');

    if(! isset($u))
    {
        redirect('loggedin');
    }
}

Loggedin当他在未登录的情况下尝试访问控制器时,他应该被重定向到login控制器

function __construct()
{
    parent::__construct();
    $u = $this->session->userdata('username');

    if(isset($u))
    {
        redirect('login');
    }
}

但是当我按下注销按钮时,它必须重定向到Login控制器,但他仍然留在Logggedin控制器上。

function logout()
{
    $this->session->sess_destroy();
    redirect('login');
} 

代码中可能有什么问题?

4

2 回答 2

0

你的病情总是在恢复true

$u=$this->session->userdata('username');

// this is ALWAYS true because $u will equal the value from session or false
if(!isset($u))
{
  redirect('loggedin');
}

相反,你应该这样做

$u=$this->session->userdata('username');
if( ! $u)
{
  redirect('loggedin');
}

如果数据不存在,该userdata方法将返回 a 。boolean(false)

来自 Code Igniter 手册 - 检索会话数据

注意:如果您尝试访问的项目不存在,该函数将返回 FALSE(布尔值)。

于 2013-08-07T17:13:05.633 回答
0

为了使用 codeigniter 重定向功能,您必须包含 codeigniter url 帮助文件,该功能实际上是在其中编写的。

因此,在构造函数中加载 codeigniter url 帮助文件

$this->load->helper('url');

并尝试在 uri 段前面放一个“/”

redirect('/login');

您的重定向功能不起作用,因为在注销时,您的会话被破坏,但重定向没有发生。

于 2013-08-07T17:11:25.617 回答