2011-08-13 23 views
2

セッションを確認するためにMY_Controllerクラスを作成しました。Codeigniter redirect()の問題

私のLoginControllerがユーザー情報をチェックしていて、それがOKであれば、ユーザーをPainelControllerにリダイレクトします。私はリダイレクトを使用するので、私のURLは/ localhost/session/loginの代わりに/ localhost/painelで更新されます。

リダイレクトを使用すると、

回避策はありますか?

ご協力いただきありがとうございます。

PS:私は.htaccessファイルを使用して、CI Wiki

EDITログインの

class MY_Controller extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     if(!$this->session->userdata('usuario')) { 
      redirect('login'); 
     } 
    } 

} 

ワンピースで見つかった1:CI_Controller

if($rs) 
      { 

       $this->session->set_userdata('usuario', $usuario);//usuario is a object 
       //$this->load->view('painel');//it works 
       redirect('painel', 'location');//it doesn't 
      } 
      else 
      { 
       $this->load->view('login', $data = array('mensagem'=>'Usuário ou senha inválidos.')); 
      } 

拡張 -

マイPainelビュー

echo $this->session->userdata('usuario')->usuario_nome; //it works 
only if I load->view('painel') 

私は私のPainelControllerにこのセッション値にアクセスしようとしても(MY_Controllerを拡張)、それは動作しません、と言うだろう:

Message: main() [function.main]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Usuario" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition 
+0

これで1点はありませんでしたか?あなたのセッションは、リダイレクト後に自分自身でクリアされていますか? – Aniket

+0

もしそうなら、なぜ私はロードとビューを使用すると正しく動作し、リダイレクトだけでこの問題が発生するからです。 – Gerep

+0

いくつかのセッション変数をエコーすることで、クリアされているかどうか確認できます。 – Aniket

答えて

0

私はカップルをリダイレクトしようとしました私のCIサンドボックスでは何回も、私はセッションを失うことはありませんでした。
PainelControllerでどのライブラリ/ヘルパーを使用していますか?
特定のコントローラに@session_start();がないようです。

通常、あなたのためにこれを処理する既存のAuthライブラリを使用して、controllerのコンストラクタまたはこれをMY_Controllerに含めることができます。

class Events extends CI_Controller { 
// Constructor function 
public function __construct() 
{ 
    //load initial models and libraries that are needed for the controller 
    parent::__construct(); 
    $this->load->library('auth'); 
      ... 
    } 
    ... 
} 

そして、私のauthライブラリは、このようなコンストラクタを持っているでしょう:
は、ここでの例です。

class Auth { 
    var $CI  = NULL; 

    function Auth($props = array()) 
    { 
    $this->CI =& get_instance(); 

    // Load additional libraries, helpers, etc. 
    $this->CI->load->library('session'); 
    $this->CI->load->database(); 
    $this->CI->load->helper('url'); 
    @session_start(); 
    } 
    ... 
} 

EDIT:

また、通常config/autoload.phpに位置あなたのautoloadでこれを含めることができます。
http://codeigniter.com/user_guide/general/autoloader.html

次に例を示します。

/* 
| ------------------------------------------------------------------- 
| Auto-load Libraries 
| ------------------------------------------------------------------- 
| These are the classes located in the system/libraries folder 
| or in your application/libraries folder. 
| 
| Prototype: 
| 
| $autoload['libraries'] = array('database', 'session', 'xmlrpc'); 
*/ 

$autoload['libraries'] = array('database','session', 'encrypt'); 
+1

CodeIgniterのセッションライブラリはあなたのために 'session_start'を行います。 –

+0

だから私は彼の図書館を頼んだのですが、彼はそうではないようです。通常、すべてのコントローラまたはメソッドで、冗長セッション認証ではなく、制限または許可を処理する 'auth'ライブラリがあります。 – ace

+0

その問題は、すべてのコントローラにauth libraryをロードする必要があることです。 – Gerep

関連する問題