PHP/codeigniter - использование выхода ()

У меня есть несколько страниц, которые требуют входа в систему, таким образом, все контроллеры, которые связываются с этими страницами, запускаются с

$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();
    }
}

. Я ожидал эти инструкции произойти в последовательности, но я только получаю пустую страницу. Как я могу удостовериться, что выход () выполняется только после того, как все представления загружаются?

20
задан Patrick 11 April 2010 в 22:46
поделиться

4 ответа

В этом случае вы не должны использовать exit. Если сеанс недействителен, вам следует перенаправить приложение, используя пример:

redirect('/init/login/','refresh');
14
ответ дан 29 November 2019 в 23:00
поделиться

В этом случае Педро прав. Если они не вошли в систему, просто перенаправьте их, даже лучше, если вы можете использовать общедоступные / административные именованные базовые контроллеры , чтобы вам не приходилось делать это в каждом отдельном защищенном файле.

Вообще говоря, если вы используете 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 () следует использовать только в том случае, если вы действительно хотите мгновенного прекращения выполнения вашего приложения для отладки, сообщения об ошибках и т. Д.

15
ответ дан 29 November 2019 в 23:00
поделиться

exit () обрезает ваш скрипт там, и фактическая функция контроллера _output () никогда не вызывается. Вам нужно добавить действие за один ваших контроллеров, например, экран входа пользователя и перенаправления туда. Вы можете использовать функцию flashdata из сеанса - http://codeigniter.com/user_guide/libraries/sessions.html , чтобы передать свое сообщение, а затем поймать его внутри вашего представления и отобразить.

Другой способ, который не очень умен, но должен работать, - это принудительно вызвать функцию вывода.

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');
        $this->_output();
        exit();
    }
}
2
ответ дан 29 November 2019 в 23:00
поделиться

Я недостаточно знаю о рабочем процессе codeigniter, но мне кажется, что вы хотите перенаправить на страницу входа, а не пытаться ее отобразить. Очевидно, ни один из предоставленных вами кодов не отправляет шаблон в браузер к моменту вызова exit () .

2
ответ дан 29 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: