gpt4 book ai didi

codeigniter - 如何解决 CodeIgniter 中的 post_controller_constructor Hooks 重定向问题

转载 作者:行者123 更新时间:2023-12-04 04:40:40 25 4
gpt4 key购买 nike

我正在尝试在 CodeIgniter 中设置一个“post_controller_constructor” Hook 。目的是检查用户是否未登录,然后将他重定向回登录页面。

这是我的钩子(Hook)配置数组:

$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";
}
}}

现在这里有问题:
  • 当它收到来自“登录” Controller 的请求时,它不会从 check_status() 函数中的第一个 if 语句返回,并在加载 View 之前打印“未登录”。
  • 如果未设置 session 用户数据,当我尝试重定向时,它会在我的浏览器中显示错误“此网页有重定向循环”。为此,我已将重定向语句
  • 注释掉。

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

    最佳答案

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

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

    然后在你的钩子(Hook)中你可以检查它:
    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当用户未登录并且他不在登录页面上时,服务器会将他重定向到该页面。

    关于codeigniter - 如何解决 CodeIgniter 中的 post_controller_constructor Hooks 重定向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18929881/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com