Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何防止使用codeigniter中键入的url进入站点_Php_Codeigniter - Fatal编程技术网

Php 如何防止使用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');

我有一个使用CodeIgniter的网站,现在几乎完成了。我的问题是,即使我已经实现了会话并维护了登录系统,一个人也可以通过在浏览器地址栏中键入URL来访问任何页面

我为患者注册实施了如下会话:

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控制器来创建我的应用程序控制器。

。将逻辑放入控制器的构造函数中…无需为所有可能的路由制定唯一的规则。