可能重复:
Constructor session validation for different functions
框架:CI(CodeIgniter)
情况:
我有4页(控制器)即:
home
login
dashboard
editprofile
使用
主页,无论是否登录
登录必须只有在未经过身份验证的情况下才能访问
信息中心和editprofile
我对我的控制器进行了这样的验证:
if($this->session->userdata('isLoggedIn')){
// stay here do the function
} else {
// leave this page
header('Location:'.base_url().'login');
}
我的function index(){}
。
但是当我开发系统时,随着我创建更多方法,更多控制器,它变得更加混乱...... 因为你需要使用这个
if($this->session->userdata('isLoggedIn')){
// stay here do the function
} else {
// leave this page
header('Location:'.base_url().'login');
}
每当你有方法时,
我已经在stackoverflow中阅读了几个问题......唯一最好的答案是:链接到这里
它说我必须使用装饰模式...但我不明白我怎么想这样做。
答案 0 :(得分:2)
为每种类型的用户创建不同的基本控制器,然后您只需设置一次该语句。我们的用户控制器如下所示:
<?PHP
class User_Controller extends MY_Controller
{
function __construct()
{
parent::__construct();
if (!$this->session->userdata('is_logged_in')) {
$this->session->set_flashdata('message', "I'm sorry, but you must be logged in to view that page.");
redirect("/");
}
}
}
然后我们想要登录用户访问的任何控制器都会自动扩展User_Controller,确保只有在您登录时才能使用任何功能。您需要将其保存到核心文件夹才能扩展它。
您还需要将此添加到config.php中,以使基本控制器具有除MY _
之外的任何前缀function __autoload($class)
{
if(strpos($class, 'CI_') !== 0)
{
@include_once( APPPATH . 'core/'. $class . EXT );
}
}