PHP/codeigniter - 使用 exit()

2022-08-30 20:23:26

我有一些页面需要登录,因此链接到这些页面的所有控制器都以

$this->checkSession();
//...rest of the code

CheckSession 应验证会话是否仍然处于活动状态,否则将显示一条消息并停止执行控制器中其余代码:

function checkSession()
{
    if (!$this->session->userdata('is_logged_in'))
    {
        //the session has expired!
        $data['main'] = 'confirmation_message';
        $data['title'] = "Session expired";
        $this->load->vars($data);
        $this->load->view('template');
        exit();
    }
}

.我本来以为这些指令会按顺序发生,但我只得到一张白纸。如何确保 exit() 仅在加载所有视图后才执行?


答案 1

在这种情况下,佩德罗是正确的。如果他们没有登录,只是重定向他们,如果你能使用公共/管理员命名的基本控制器来阻止你在每个单独的受保护文件中执行此操作,那就更好了。

一般来说,如果你使用exit(),它将停止输出库运行。如果您只想停止当前控制器的执行,但允许控制器的输出,则可以以完全相同的方式使用 return。

function checkSession()
{
    return (bool) $this->session->userdata('is_logged_in');
}

然后简单地说:

if(!$this->checkSession())
{
        //the session has expired!
        $data['main'] = 'confirmation_message';
        $data['title'] = "Session expired";
        $this->load->vars($data);
        $this->load->view('template');
        return;
}

exit() 只应在您确实希望应用程序执行立即终止以进行调试、错误报告等时使用。


答案 2

在这种情况下,您不应该使用exit,如果会话无效,您应该做的是使用示例重定向您的应用程序:

redirect('/init/login/','refresh');

推荐