dtxf759200 2011-07-26 03:55
浏览 65
已采纳

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

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

I have three controllers, Site, Login and Admin. Site and Login work perfectly. I know I am logging in correctly, because I set the "incorrect username" blah blah error message, which shows up if I have incorrect login details. When I log in successfully however, I get a 500 Internal Server Error:

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

Here's the admin controller:

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

In which where it tries to access index(), the 500 error happens.

If you need more code, let me know in a comment. I hope it is something obvious.

  • 写回答

2条回答 默认 最新

  • duanmaduan1848 2011-07-26 05:32
    关注

    Looks like a problem with your function that checks login. From the code you provide, I see this workflow:

    • User is not logged: he's redirected to login/index and logs in.
    • I suppose then he's redirected to admin controller, right? (when succesfully logged). Ok, now when admin controller is initialized it checks, within the controller itself, if the user is logged.
    • It is, ok, but you don't tell it to go to some other page if the user is logged, so: you go to admin/index, but the constructor "intercepts" your request BEFORE it being routed (since the constructor is called as soon as the class is initialized, before the index() method is ever reached), and it hangs there: index() is called from the URL but the request doesn't go past isLogged(), and this discrepancy can cause you those troubles (I had a similar problem once).

    You should do like this instead of using a controller's method:

    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
          }
    
    }
    

    Moreover, as a side note, I'd do this check in some method in a library, and have it just return TRUE/FALSE and use that in my controller's constructor. Like

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

    This just for the sake of business logic and encapsulation, but it's just an idea and an advice.
    If you still want to use the isLogged() of your Controller (but in this way every controller that checks for login needs is own method...) just put an ELSE clause, that redirects to index() if the checking gives positive response.

    Edited after comment:

    By chance are you calling a favicon in your meta tags? <link rel="icon" href="http://mysite/assets/favicon.ico" /> or whatever url you have? Did you spelled it RIGHT? And don't have a href="http://mysite/favicon_ico", which CI things is a controller?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 对于这个复杂问题的解释说明
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败