我想在CodeIgniter中设置'post_controller_constructor'挂钩。目的是检查用户是否未登录,然后将他重定向回登录页面。如何解决post_controller_constructor挂钩CodeIgniter中的重定向问题
这里是我的钩配置数组:
$hook['post_controller_constructor'] = array(
'class' => 'Checkpoint',
'function' => 'check_status',
'filename' => 'checkpoint.php',
'filepath' => 'controllers'
);
这是挂机事件类
class Checkpoint {
var $CI;
function __construct(){
$this->CI =& get_instance();
}
function check_status() {
if($this->CI->router->class == 'Login'){
return;
}
if (!isset($this->CI->session)){
$this->CI->load->library('session');
}
if(!$this->CI->session->userdata('log_status')){
//redirect(site_url('login'));
echo "not logged in";
}
else{
echo "logged in";
}
}}
现在这里的问题:
当它收到来自'Login'控制器的请求不会从check_status()函数中的第一个if语句返回,而在加载视图之前打印“未登录”。
当我尝试重定向,如果没有设置会话userdata,它会在浏览器中显示错误“此网页有重定向循环”。由于这个原因,我已经评论了重定向声明
我能做些什么来解决这些问题?
我认为这只是你何时应该调用你的代码的问题。这取决于调用之前的代码。 –
我正在构建任何控制器后调用此代码。我的目的是确保访问者无需登录即可访问任何网址。 – Rivnat
那么这就没有意义了。因为一旦用户进入你的网站,他将没有会话,然后他将被重定向到登录页面,你的钩子会再次检查它,看看他还没有会话,另一个重定向将发生无限的时间。 –