0

codeigniter でページのリダイレクトを管理したいのですが、コントローラーが 2 つあります。

  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 に答える