0

ログインフォームがあり、コントローラーに直接アクセスしようとすると、うまくいきます! このアクセスを防ぐにはどうすればよいですか?

私はいくつかのクラスを得ました

class C_home extends CI_Controller{

public function __construct() {
    parent::__construct();
    $this->session->set_userdata('islogin'); //to set session islogin
}

function index()
{
    if ($this->session->userdata('islogin') != TRUE) 
    {
        redirect('c_home','refresh'); //caused infinite refresh
    }
        redirect('c_login', 'refresh');
}
}

次に、アクセスコントローラーに直接接続しようとすると、ページに無限の更新が表示され、ページにログインフォームを表示したい

どうすればこれを解決できますか?

4

4 に答える 4

1

いくつかのコメント:

  1. この$this->session->set_userdata('islogin');行では、割り当てられる値である 2 番目の引数を渡す必要があります (おそらく、TRUE が意図したものです)。
  2. リダイレクト行が間違っていると思います。ユーザーがログインしていない場合は、ログインにリダイレクトします。ユーザーがログインしていない場合、コードはホームにリダイレクトするため、無限ループが発生します(このコードはホームページにあるためです!
  3. この$this->session->set_userdata('islogin', TRUE);行は明らかにログインコントローラーにあるはずですが、テスト目的でここに置いたのではないでしょうか?
于 2012-10-12T10:37:50.597 に答える
0

むしろこうすればいいのに

class C_home extends CI_Controller {

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

function index()
{
    if ($this->session->userdata('islogin') != TRUE) 
    {
        redirect('c_home/login','refresh'); // go for login
    }

    // do something for loged in users here

}

function login()
{
    if ($this->session->userdata('islogin') == TRUE) 
    {
        redirect('c_home','refresh'); // get back home
    }

    // perform some login logic here
    // then, if successful
    {
        $this->session->set_userdata('islogin',TRUE);
        redirect('c_home','refresh'); // get back home
    }

    // or else
    // display login form here 

}

もちろん、このhttps://github.com/DaBourz/SimpleLoginSecureのようなサードパーティのログインライブラリを使用することを常にお勧めします

于 2012-10-12T14:24:32.957 に答える
0

あなたがする必要があるのは、セッションを管理し、ログインしたコントローラーをログアウトしたコントローラーから継承によって分割する基本コントローラーをセットアップすることです。

ここでは、ログイン状態とログアウト状態をどのように管理するのが最善かという質問がよく寄せられます。その方法の詳細な説明については、この回答を参照してください。

于 2012-10-12T17:24:00.690 に答える
0

あなたはコントローラーにアクセスすることになっています。それが彼らが物事を制御するポイントです。URL 経由でアクセスしたくない特定の関数がある場合は、関数名の前に _ のような _notForPublicFunction を付けます。無限リフレッシュとは…

if(!$this->session->userdata('isLogin'))
{
    redirect('c_login');
} else {
    redirect('c_home');
}
于 2012-10-12T10:38:06.633 に答える