ANSWERED! IT WAS A TYPO OMG. Always check EVERY CHARACTER
我有三个控制器, Site
, Login
和 Admin
. 网站和登录工作完美 . 我知道我正在正确登录,因为我设置了"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 回答
看起来你的功能检查登录是一个问题 . 从您提供的代码中,我看到了这个工作流程:
用户未登录:他被重定向到登录/索引并登录 .
我想他会被重定向到管理员控制器,对吧? (成功记录时) . 好的,现在当管理员控制器初始化时,它会在控制器本身内检查用户是否已登录 .
确实如此,但是你不会超过isLogged(),而这种差异会导致你遇到麻烦(我曾经遇到过类似的问题) .
你应该这样做,而不是使用控制器的方法:
此外,作为旁注,我会在库中的某些方法中执行此检查,并让它只返回TRUE / FALSE并在我的控制器的构造函数中使用它 . 喜欢
这只是为了业务逻辑和封装,但它只是一个想法和建议 .
如果你仍然想使用你的Controller的isLogged()(但是这样每个检查登录需求的控制器都是自己的方法...)只需要放一个ELSE子句,如果检查得到肯定的响应,它会重定向到index() .
Edited after comment:
您是否偶然在meta标签中调用了favicon?
<link rel="icon" href="http://mysite/assets/favicon.ico" />
或你有什么网址?你拼错了吗?并且没有href="http://mysite/favicon_ico"
,CI的东西是控制器?你有一个无限的重定向循环 .
isLogged()
在index()
之前的__construct()
中运行,因此只要不满足会话数据,它就会保持重定向 .另一件事:
!isset($isLogged)
将始终返回false,因为如果没有设置值,$this->session->userdata()
将返回布尔值FALSE
. 合理?$this->session->userdata('anything')
总是"set" .快速修复,假设“index”是您在同一控制器中的登录页面:
此外,如果用户已登录,请确保从登录页面的其他位置重定向 .