我有几个页面需要登录,所以链接到这些页面的所有控制器都以
$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()?
发布于 2010-04-12 15:53:47
在这种情况下,你不应该使用exit,如果会话无效,你应该使用example重定向你的应用:
redirect('/init/login/','refresh');
发布于 2010-04-12 17:28:47
在这种情况下,Pedro是正确的。如果它们没有登录,只需重定向它们,如果您可以使用Public/Admin named base controllers来避免在每个单独的受保护文件中执行此操作,那就更好了。
一般来说,如果您使用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()。
发布于 2013-02-03 02:26:06
我也遇到过类似的问题。由于没有登录,我想要阻止用户的位置。但我想为他们提供一个链接列表,而不是简单地将他们重定向到登录页面。我使用的是CI版本1.7.2,$this->_output() $this->display->_output()和$this->output->display()解决方案对我不起作用。但是,我将使用$this->output-> get _output()函数获得结果。
$this->load->vars($data);
$this->load->view('template');
die($this->output->get_output());
https://stackoverflow.com/questions/2618993
复制相似问题