CodeIgniter 500内部服务器错误

时间:2011-07-26 03:55:31

标签: php codeigniter

ANSWERED!它是一个TYPO OMG。始终检查每个字符

我有三个控制器,SiteLoginAdmin。网站和登录工作完美。我知道我正在正确登录,因为我设置了“错误的用户名”等等错误消息,如果我有不正确的登录详细信息,则会显示。但是,当我成功登录时,出现500内部服务器错误:

HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfill the request.

这是管理员控制器:

function __construct()
    {
        parent::Controller();
        $this->isLogged();
    }

    function isLogged()
    {
        $isLogged = $this->session->userdata('isLogged');

        if (!isset($isLogged) || $isLogged != true)
        {
            redirect('login/index');
        }
    }

    function index()
    {
        $data['metaDescription'] = 'Admin area of danaemc.com';
        $data['keywords'] = '';
        $data['title'] = 'danaemc :: admin :: home';

        $data['main_content'] = 'admin_view';
        $this->load_view('includes/admin_template', $data);
    }

在尝试访问index()时,会发生500错误。

如果您需要更多代码,请在评论中告诉我。我希望这是显而易见的。

2 个答案:

答案 0 :(得分:2)

您的函数检查登录时看起来有问题。从您提供的代码中,我看到了这个工作流程:

  • 用户未登录:他被重定向到登录/索引并登录。
  • 我想他会被重定向到管理员控制器,对吧? (成功记录时)。好的,现在当管理员控制器初始化时,它会在控制器本身内检查用户是否已登录。
  • 确实如此,但如果用户已登录,则不要告诉它转到其他页面,因此:您转到admin / index,但构造函数会在路由之前“拦截”您的请求(因为在初始化类之前,在达到index()方法之前调用构造函数,并且它在那里挂起:从URL调用index()但是请求不会超过isLogged(),这个差异可能会导致你的麻烦(我有一次类似的问题)。

你应该这样做而不是使用控制器的方法:

function __construct()
{
       parent::__construct();   //what is parent::Controller() you wrote??
      if(!isset($this->session->userdata('isLogged')) OR $this->session->userdata('isLogged') == FALSE)
      {
         redirect('login', 'refresh'); // 'login/index' should be automatically called
      }

}

此外,作为旁注,我会在库中的某个方法中执行此检查,并让它只返回TRUE / FALSE并在我的控制器的构造函数中使用它。像

 function __construct()
 {
   parent::__construct();
   if(FALSE === $this->myauthlibrary->is_logged())
   {
     redirect('login','refresh');
   }
 }

这只是为了商业逻辑和封装,但这只是一个想法和建议 如果你仍然想使用你的Controller的isLogged()(但是这样每个检查登录需求的控制器都是自己的方法......)只需要放一个ELSE子句,如果检查得到肯定的响应,它会重定向到index()

评论后编辑:

您是否在meta标签中调用了favicon? <link rel="icon" href="http://mysite/assets/favicon.ico" />或你有什么网址?你拼错了吗?并且没有href="http://mysite/favicon_ico",哪些CI事物是控制器?

答案 1 :(得分:0)

你有一个无限的重定向循环。

isLogged()__construct()之前index()运行,因此只要您的会话数据不符合,它就会一直重定向。

另一件事:!isset($isLogged) 总是返回false,因为如果没有值,$this->session->userdata()将返回布尔值FALSE设置。有意义吗?

$this->session->userdata('anything')始终是“设置”。

快速修复,假设“index”是您在同一控制器中的登录页面:

function isLogged()
{
    $isLogged = $this->session->userdata('isLogged');
    $isLoginPage = $this->router->method === 'index';

    if ( ! $isLogged && ! $isLoginPage)
    {
        redirect('login/index');
    }
}

此外,如果用户 已登录,请务必从登录页面的其他位置重定向。