【发布时间】:2013-09-21 07:01:52
【问题描述】:
我正在尝试在 CodeIgniter 中设置一个“post_controller_constructor”挂钩。目的是检查用户是否未登录,然后将他重定向回登录页面。
这是我的钩子配置数组:
$hook['post_controller_constructor'] = array(
'class' => 'Checkpoint',
'function' => 'check_status',
'filename' => 'checkpoint.php',
'filepath' => 'controllers'
);
这是 Hook 事件的类
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";
}
}}
现在是问题:
-
当它收到来自“登录”控制器的请求时,它不会从 check_status() 函数内的第一个 if 语句返回,并在加载视图之前打印“未登录”。
李> 如果未设置会话用户数据,当我尝试重定向时,它会在我的浏览器中显示错误“此网页具有重定向循环”。为此我已经注释掉了重定向语句
我可以做些什么来解决这些问题?
【问题讨论】:
-
我认为这只是何时调用代码的问题。这取决于调用之前的代码。
-
我在构造任何控制器之后调用此代码。我的目的是确保访问者在没有登录的情况下不能点击任何网址。
-
那没有意义。因为一旦用户进入您的站点,他将没有会话,然后他将被重定向到登录页面,您的钩子将再次检查以查看他仍然没有会话,并且将无限次发生另一个重定向。
-
没错,这是我的第一个问题,为什么当我在第一个 if 语句中检查时请求来自“登录”控制器时,它没有从“check_status()”函数返回?跨度>
标签: codeigniter hook