Session Codeigniter重定向()问题
我已经创建了一个MY_Controller类来检查会话 我的LoginController正在检查用户信息,如果没有问题,我将用户重定向到PainelController。我使用重定向,因此我的url将用/localhost/painel而不是/localhost/session/login刷新 问题是,当我使用重定向时,我无法访问我的会话,只能使用load->view 有解决办法吗 提前感谢您的帮助 PS:我使用.htaccess,在 编辑 登录项:扩展CI_控制器Session Codeigniter重定向()问题,session,codeigniter,redirect,codeigniter-2,Session,Codeigniter,Redirect,Codeigniter 2,我已经创建了一个MY_Controller类来检查会话 我的LoginController正在检查用户信息,如果没有问题,我将用户重定向到PainelController。我使用重定向,因此我的url将用/localhost/painel而不是/localhost/session/login刷新 问题是,当我使用重定向时,我无法访问我的会话,只能使用load->view 有解决办法吗 提前感谢您的帮助 PS:我使用.htaccess,在 编辑 登录项:扩展CI_控制器 if( $rs )
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.'));
}
-
我的佩内尔观点
echo $this->session->userdata('usuario')->usuario_nome; //it works
only if I load->view('painel')
即使我尝试在PainelController扩展我的_控制器上访问此会话值,它也不会工作,会说:
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
我在我的CI沙盒上尝试了几次重定向,但我没有丢失会话。您在PainelController中使用了哪些库/帮助程序? 似乎您没有@session\u start;在那个特定的控制器中 通常,您可以使用现有的Auth库来处理此问题,然后将其包含在每个控制器的构造函数中,甚至包含在MY_控制器中。 下面是一个例子:
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();
}
...
}
编辑:
您还可以将其包含在自动加载中,通常位于config/autoload.php。
这里有一个例子
/*
| -------------------------------------------------------------------
| 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');
我在我的CI沙盒上尝试了几次重定向,但我没有丢失会话。您在PainelController中使用了哪些库/帮助程序? 似乎您没有@session\u start;在那个特定的控制器中 通常,您可以使用现有的Auth库来处理此问题,然后将其包含在每个控制器的构造函数中,甚至包含在MY_控制器中。 下面是一个例子:
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();
}
...
}
编辑:
您还可以将其包含在自动加载中,通常位于config/autoload.php。
这里有一个例子
/*
| -------------------------------------------------------------------
| 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');
我在这件事上一分也没有?你的会话是否在重定向后自行清除?如果是,我不知道为什么以及如何清除,因为当我使用load->view时,它工作正常,只有重定向给了我这个问题。你可以通过回显某个会话变量来检查它是否被清除。因此你可以访问你的会话???@Gerep这似乎是对CI核心的某种限制当你加载视图时,它可以工作,但在重定向时,它似乎不起作用。我在这方面没有得到一点什么?你的会话是否在重定向后自行清除?如果是,我不知道为什么以及如何清除,因为当我使用load->view时,它工作正常,只有重定向给了我这个问题。你可以通过回显某个会话变量来检查它是否被清除。因此你可以访问你的会话???@Gerep这似乎是对CI核心的某种限制它在加载视图时工作,但在重定向时似乎不工作。CodeIgniter的会话库为您启动会话。\u。这就是为什么我要他的库,但他似乎没有。通常,在每个控制器或方法中都有一个用于处理限制或权限的身份验证库,而不是冗余的会话身份验证。问题是,我必须在每个控制器上加载身份验证库。您不必这样做。这是自动加载配置。我会把这个加到我的答案中。CodeIgniter的会话库为您启动会话。这就是为什么我要他的库,但他似乎没有。通常,在每个控制器或方法中都有一个用于处理限制或权限的身份验证库,而不是冗余的会话身份验证。问题是,我必须在每个控制器上加载身份验证库。您不必这样做。这是自动加载配置。我会把这个加到我的答案中。