ANSWERED!它是一个TYPO OMG。始终检查每个字符
我有三个控制器,Site
,Login
和Admin
。网站和登录工作完美。我知道我正在正确登录,因为我设置了“错误的用户名”等等错误消息,如果我有不正确的登录详细信息,则会显示。但是,当我成功登录时,出现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错误。
如果您需要更多代码,请在评论中告诉我。我希望这是显而易见的。
答案 0 :(得分:2)
您的函数检查登录时看起来有问题。从您提供的代码中,我看到了这个工作流程:
你应该这样做而不是使用控制器的方法:
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');
}
}
此外,如果用户 已登录,请务必从登录页面的其他位置重定向。