我希望有一个类来检查我指定的所有控制器上的登录。 Codeigniter版本是2.1.0,我有php 5.3.10
Hier是我如何设置的: 我看https://www.codeigniter.com/user_guide/general/core_classes.html 我把它设置成这样: 在/application/core/MY_Main.php
中class MY_Main extends CI_Controller {
function __construct()
{
parent::__construct();
}
}
在我的控制器中,我有welcome.php
?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends MY_Main {
function __construct()
{
parent::__construct();
}
public function index()
{
$this->load->view('welcome_message');
}
}
因此,如果我在MY-Main中进行登录检查,它应该可以正常工作,但我不能让任何人工作吗???
答案 0 :(得分:6)
在我按照CI手册中的描述获得核心类的扩展之前,我需要将以下代码添加到/application/config/config.php。
从此处获取的代码http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY
function __autoload($class)
{
if(strpos($class, 'CI_') !== 0)
{
@include_once( APPPATH . 'core/'. $class . EXT );
}
}
答案 1 :(得分:2)
你的逻辑是正确的,这应该有效。这正是我在所有codeigniter网站上所做的事情。我的代码有点复杂,因为我正在从库中调用我的登录检查(因此我必须调用$CI =& get_instance();
然后$CI
代替$this
),但下面的内容应该有效为了你。 logged_in
只是用户登录时为会话数据集项指定的名称。
class MY_Main extends CI_Controller {
function __construct()
{
parent::__construct();
$session_data = $this->session->all_userdata();
if(!isset($session_data['logged_in']))
redirect('/login');
}
}
关于你上面的评论(http 500),不确定那里发生了什么。你粘贴的代码不应该像这样抛出错误,所以其他东西可能正在发生。尝试启用内置日志记录功能的codeigniters。
答案 2 :(得分:1)
您应该创建一个库类并将其放在库文件夹中,并将其作为auto_load或控制器内部加载。 在库中创建函数,例如:
/**
*
* @return boolean check if a user is logged in or not
*/
function notLogin()
{
if (!$this->is_logged_in()){
//echo "pelase <a href='login'><b>login</b></a> to continue ";
redirect('home/login','refresh'); exit;
}
return true;
}
并在你的控制器构造函数或你想要的任何函数中调用它:
class Main extends CI_Controller
{
private $POST = array();
private $ci_form;
function __construct()
{
parent::__construct();
//check if user is logged in or not
$this->m_auth->notLogin();
$this->load->library('form_validation');
$this->load->library('ajax_pagination');
}
}
答案 3 :(得分:0)
由于数据库连接,有一段时间了。
请检查您的数据库是否: