如何防止用codeigniter输入url进入网站
我有一个使用CodeIgniter的网站,现在已经基本完成了。我的问题是,即使我已经实现了会话并保持登录系统,但个人可以通过在浏览器地址栏中输入URL来访问任何页面。如何防止用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();
}
}
匿名用户无法接取系统只是这样输入控制器名称:
但他们可以这样做:
http://localhost/demo_site/index.php/register_controller/search_patient
人不能通过键入控制器名称的访问,但是可以通过除了所述控制器输入一个长URL,如上所示的一个进入系统。
这里有什么问题?什么是可能的解决方案?
您必须在控制器的构造函数中实现登录检查。
无论何时调用控制器,都应检查用户是否已登录 - 如果不是,则重定向到登录页面或错误页面。
要确认如果输入登录检查放一个echo
和exit
的is_logged_in()
函数内部并检查是否出现在http://localhost/demo_site/index.php/register_controller/search_patient
你可能做登录检查你的各模块,因此你错过了的情况下一些案例。
最好是定义一组私有模块(比如说在一个数组中)并在前台控制器本身(在一个地方)进行登录检查,而不是在模块级别重复。
我同意tHeSiD。这段代码应该放在构造函数中。理想情况下,在您用来扩展所有与管理相关或受限制的类的基类中。通常我使用扩展CI_Controller(2.0)或Controller(1.7.x)的Admin_Controller基类,然后通过扩展管理控制器来创建我的应用程序控制器。
其次。将逻辑放在控制器的构造函数中......不需要为所有可能的路径制定独特的规则。 – treeface 2010-12-17 18:33:51