我创建了一个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
答案 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