首页 文章

CodeIgniter 500内部服务器错误[关闭]

提问于
浏览
0

ANSWERED! IT WAS A TYPO OMG. Always check EVERY CHARACTER

我有三个控制器, SiteLoginAdmin . 网站和登录工作完美 . 我知道我正在正确登录,因为我设置了"incorrect username" blah blah错误消息,如果我有不正确的登录详细信息,则会显示该消息 . 但是,当我成功登录时,出现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

    看起来你的功能检查登录是一个问题 . 从您提供的代码中,我看到了这个工作流程:

    • 用户未登录:他被重定向到登录/索引并登录 .

    • 我想他会被重定向到管理员控制器,对吧? (成功记录时) . 好的,现在当管理员控制器初始化时,它会在控制器本身内检查用户是否已登录 .

    • 确实如此,但是你不会超过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() .

    Edited after comment:

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

  • 2

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

    isLogged()index() 之前的 __construct() 中运行,因此只要不满足会话数据,它就会保持重定向 .

    另一件事: !isset($isLogged) 将始终返回false,因为如果没有设置值, $this->session->userdata() 将返回布尔值 FALSE . 合理?

    $this->session->userdata('anything') 总是"set" .

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

    function isLogged()
    {
        $isLogged = $this->session->userdata('isLogged');
        $isLoginPage = $this->router->method === 'index';
    
        if ( ! $isLogged && ! $isLoginPage)
        {
            redirect('login/index');
        }
    }
    

    此外,如果用户已登录,请确保从登录页面的其他位置重定向 .

相关问题