Codeigniter重定向()问题

时间:2011-08-13 18:23:12

标签: session codeigniter redirect codeigniter-2

我创建了一个MY_Controller类来检查会话。

我的LoginController正在检查用户信息,如果可以,我将用户重定向到PainelController。我使用重定向,所以我的url将使用/ localhost / painel而不是/ localhost / session / login

进行刷新

问题在于,当我使用重定向时,我无法访问我的会话,只能使用load-> view。

有解决方法吗?

提前感谢您的帮助。

PS:我使用.htaccess,CI Wiki

上找到的.htaccess

修改

class MY_Controller extends CI_Controller {

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

}

登录部分:扩展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

1 个答案:

答案 0 :(得分: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();
  }
  ...
}

编辑:

您也可以在通常位于autoload的{​​{1}}中加入此内容。
http://codeigniter.com/user_guide/general/autoloader.html

这是一个例子。

config/autoload.php