【问题标题】:How to solve post_controller_constructor Hooks redirection issues in CodeIgniter如何解决 CodeIgniter 中的 post_controller_constructor Hooks 重定向问题
【发布时间】: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";
    }
}}

现在是问题:

  1. 当它收到来自“登录”控制器的请求时,它不会从 check_status() 函数内的第一个 if 语句返回,并在加载视图之前打印“未登录”。

    李>
  2. 如果未设置会话用户数据,当我尝试重定向时,它会在我的浏览器中显示错误“此网页具有重定向循环”。为此我已经注释掉了重定向语句

我可以做些什么来解决这些问题?

【问题讨论】:

  • 我认为这只是何时调用代码的问题。这取决于调用之前的代码。
  • 我在构造任何控制器之后调用此代码。我的目的是确保访问者在没有登录的情况下不能点击任何网址。
  • 那没有意义。因为一旦用户进入您的站点,他将没有会话,然后他将被重定向到登录页面,您的钩子将再次检查以查看他仍然没有会话,并且将无限次发生另一个重定向。
  • 没错,这是我的第一个问题,为什么当我在第一个 if 语句中检查时请求来自“登录”控制器时,它没有从“check_status()”函数返回?跨度>

标签: codeigniter hook


【解决方案1】:

正如我在评论中所描述的,您的问题是当您进入您的网站时,挂钩会检查您是否已登录,因此如果您未登录,那么它会将您重定向到您的 login 页面,这也会触发再次钩子,这将导致无限重定向过程。 这是一个可能的解决方案: 首先,在您的会话中分配一个user_data(一旦用户进入您的站点),表示该用户已经在您的站点中,例如:

$this->session->set_userdata('is_in_login_page', TRUE);

然后在你的钩子中你可以像这样检查它:

if(!$this->CI->session->userdata('log_status') &&
 !$this->CI->session->userdata('is_in_login_page') ){
    redirect(site_url('login'));
    echo "not logged in";
}

所以一旦用户被重定向,'is_in_login_page' 值将被设置为TRUE,服务器将不再重定向他。

这听起来可能很傻,但我认为在你的情况下这是一个很好的解决方案。

注意:当用户未登录且不在登录页面时,is_in_login_page 应设置为 FALSE,以便服务器将他重定向到该页面。

【讨论】:

  • 它最初工作,第一次。当我第一次手动点击“base_url/welcome”时,它会重定向到登录页面。之后,当我再次尝试点击相同的 url 时,欢迎页面出现。不过我已经按照您的指示解决了这个问题。
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 2021-04-28
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多