1

ログインの詳細が正しいかどうかをチェックするコールバック関数があります-間違っている場合はエラーを返します(これは正常に機能しています)。詳細が正しければ、セッション$this->session->set_userdata('logged_in',TRUE);を設定してから機能を続行しlogin、ダッシュボードにリダイレクトする必要があります-このリダイレクトは正常に機能します。

function index(){}のダッシュボードページには次の行があります

if($this->session->userdata('logged_in')) redirect('dashboard/home');

上記の行は、310リダイレクトの原因となっている行ですが、理由がわかりません。

ユーザーがログインしているかどうかを確認したいのですが、リダイレクトしdashboard/homeてログインページに戻りますhome/login

コントローラ:

class Home extends CI_Controller {

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

    public function index()
    {
        //if($this->session->userdata('logged_in')) redirect('dashboard/home');

        $data['contentMangement'] = $this->options_model->systemOptions();
        $data['pageTitle'] = 'Login';
        $data['message'] = "";
        $this->load->view('_assets/header', $data);
        $this->load->view('login', $data);
        $this->load->view('_assets/footer');
    }

    public function login() {
          $this->form_validation->set_rules('userEmail','Username', 'required|valid_email|trim|max_length[99]|xss_clean');
            $this->form_validation->set_rules('userPassword','Password', 'required|trim|max_length[200]|xss_clean|callback__checkUsernamePassword');

            if($this->form_validation->run() === FALSE) {

                $data['contentMangement'] = $this->options_model->systemOptions();
                $data['pageTitle'] = 'Login';
                $data['message'] = validation_errors('<div class="alert alert-error">', '</div>');
                $this->load->view('_assets/header', $data);
                $this->load->view('login', $data);
                $this->load->view('_assets/footer');

            }elseif($this->form_validation->run() === TRUE){

            redirect('dashboard/home');
        }
    }


    function _checkUsernamePassword() {

            $username = $this->input->post('userEmail');
            $password = $this->input->post('userPassword');

            $user = $this->user_model->check_login($username,$password);

            if(! $user)
            {
                $this->form_validation->set_message('_checkUsernamePassword', 'Sorry the details you provided have not been found');
                return FALSE;
            }else{
                 $this->session->set_userdata('logged_in',TRUE);
                return TRUE;
            }   
    }
}
4

2 に答える 2

1

これが何が起こっているかです。

私が正しくログインしていると仮定します。ログインコントローラで、を設定logged_in = TRUEし、にリダイレクトしdashboard/homeます。のindex()関数でdashboard/homelogged_in = TRUE(それが)もしあなたが私をdashboard/home再びリダイレクトするなら。もう一度、チェックしlogged_in = TRUEて、もう一度リダイレクトします。

これにより、無限のリダイレクトループが発生し、310エラー(リダイレクトが多すぎます)が発生します。

ログインチェックをやり直す必要があります。index()で、これdashboard/homeを行います:

if ($this->session->userdata('logged_in') === FALSE) redirect(site_url('dashboard/login'));

これで、ダッシュボードホームにアクセスすると、ログインしていない場合にのみリダイレクトされます。これにより、認証されたユーザーを無限ループに陥らせることなく、認証されていないユーザーからダッシュボードホームを保護します。

于 2012-06-14T10:54:31.237 に答える
0

最初にそれを行うためにを作成する必要があると思います。MY_Controllerある日、セッション変数名をからに変更することにした場合はどうlogged_inなりloggedますか?すべてのコントローラーを開いて、そのセッションを変更しますか?

を作成すると、次のように、を拡張するMY_Controllerなど、他のすべてのコントローラーが作成されます。Home_ControllerMY_Controller

class Home extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
}

あなたのMY_Controller

//under /application/core/
class MY_Controller extends Controller
{
  public function __construct()
  {
    parent::__construct();
    if(!$this->session->userdata('logged_in'))
       redirect('login');
  }
}

もちろん、それはあなたLogin_Controllerが拡張するControllerのではなく、拡張するMY_Controllerか、無限ループになります。

于 2012-06-14T01:41:27.697 に答える