Php 如何防止使用codeigniter中键入的url进入站点
我有一个使用CodeIgniter的网站,现在几乎完成了。我的问题是,即使我已经实现了会话并维护了登录系统,一个人也可以通过在浏览器地址栏中键入URL来访问任何页面 我为患者注册实施了如下会话:Php 如何防止使用codeigniter中键入的url进入站点,php,codeigniter,Php,Codeigniter,我有一个使用CodeIgniter的网站,现在几乎完成了。我的问题是,即使我已经实现了会话并维护了登录系统,一个人也可以通过在浏览器地址栏中键入URL来访问任何页面 我为患者注册实施了如下会话: function index(){ $this->is_logged_in(); } function log_out(){ $this->session->sess_destroy(); redirect('login_controller');
function index(){
$this->is_logged_in();
}
function log_out(){
$this->session->sess_destroy();
redirect('login_controller');
}
function is_logged_in(){
$is_logged_in = $this->session->userdata('is_logged_in');
if(!isset($is_logged_in)||$is_logged_in!= TRUE ){
redirect('login_controller');
}else{
$this->main();
}
}
匿名用户无法通过键入控制器名称访问系统,如下所示:
function index(){
$this->is_logged_in();
}
function log_out(){
$this->session->sess_destroy();
redirect('login_controller');
}
function is_logged_in(){
$is_logged_in = $this->session->userdata('is_logged_in');
if(!isset($is_logged_in)||$is_logged_in!= TRUE ){
redirect('login_controller');
}else{
$this->main();
}
}
但他们可以这样做:
function index(){
$this->is_logged_in();
}
function log_out(){
$this->session->sess_destroy();
redirect('login_controller');
}
function is_logged_in(){
$is_logged_in = $this->session->userdata('is_logged_in');
if(!isset($is_logged_in)||$is_logged_in!= TRUE ){
redirect('login_controller');
}else{
$this->main();
}
}
用户无法通过键入控制器名称进行访问,但可以通过键入比控制器更长的url进入系统,如上图所示
这里有什么问题?可能的解决方案是什么???您必须在控制器的构造函数中执行登录检查
无论何时调用控制器,它都应该检查用户是否已登录,如果未登录,则重定向到登录页面或错误页面。听起来像是路由问题。您需要设置路由以使第二个案例非法,或者至少映射到与第一个案例相同的控制器。有关路由的更多信息。要确认它是否正在进入登录检查,请在
is logged\u in()
函数中放置echo
和exit
,并检查它是否在http://localhost/demo_site/index.php/register_controller/search_patient
您可能正在各自的模块中进行登录检查,因此在某些情况下您错过了登录检查
最好定义一组私有模块(比如在一个数组中),并在frontcontroller本身(在一个位置)中进行登录检查,而不是在模块级重复进行登录检查。我同意ID。此代码应该放在构造函数中。理想情况下,使用基类扩展所有与管理相关或受限的类。通常,我使用一个Admin_控制器基类来扩展CI_控制器(2.0)或控制器(1.7.x),然后通过扩展Admin控制器来创建我的应用程序控制器。。将逻辑放入控制器的构造函数中…无需为所有可能的路由制定唯一的规则。