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 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决