2011-09-27 42 views
0

我正在为使用CI创建的系统进行安全登录,因为应该有系统的管理员控制权。如何在Codeigniter中实现安全登录/注销?

我的做法是,我做了一个文件名为MY_System.php应用/核心目录,我得到了这行代码:

class MY_System extends CI_Controller 
{ 
function __construct() 
{ 
    parent::__construct(); 

} 
} 

然后我也有Admin_Controller.php在那里我得到这个代码:

class Admin_Controller extends MY_System 
{ 

function __construct() 
{ 
    parent::__construct(); 

    $this->is_logged_in(); 
} 

function is_logged_in() 
{ 
    $is_logged_in = $this->session->userdata('is_logged_in'); 

    if(!isset($is_logged_in) || $is_logged_in != true) 
    { 
     redirect(base_url(). 'login'); 
    } 
} 
} 

上述2个文件保存在框架的核心文件夹内。

,而在系统的控制器目录中,我得到了几个控制器让我们说人的情况下,我有这样的代码:

class Person extends Admin_Controller 
{ 
    function __construct() 
    { 
     parent::__construct(); 
    } 
} 

我相信,通过这种方式,只要是系统的页面可应受到限制我将使用Admin_Controller作为类的父级,以便用户不能直接访问页面。

现在,我的问题是,因为我会单击注销,会话将被销毁,用户的数据被清空,因此,用户必须重定向到登录页面,但它不会这样,因为每当我点击注销后右键单击浏览器的后退按钮,用户所在的上一页仍会显示,但当我点击这些页面上的链接时,此时用户将被重定向到登录页面。我想要的是,单击注销后,如果他/她尝试并单击浏览器的后退按钮,他/她必须重定向到登录页面。

有没有人知道我的问题的解决方案?任何帮助表示赞赏。提前致谢。

回答

0

尝试添加follwing HTTP头到您的网页:

Cache-Control no-cache, no-store, must-revalidate 

这将迫使浏览器重新下载页面(=重新执行你的控制器,应该检查is_logged_in变量并重定向到登录页面)

+0

嗨@finalfrag。我很抱歉,但我不知道如何将其添加到我的标题中。你能举一个例子来说明怎么做吗?谢谢。 – Atasha

+0

哦,是的。我刚刚添加$ this-> output-> set_header(“Cache-Control:no-store,no-cache,must-revalidate”);在admin_controller类中,它的确有窍门。谢谢@FinalFrag – Atasha

+0

请记住,如果它是一个高流量的网站,你可能不想在每个资产上设置无存储标题......标题告诉缓存不要保留你的页面副本。如果将标题添加到所有内容(包括图像),则每个页面请求都会向您的Web服务器发送请求。 – FinalFrag

0

尽量不要做这样的:

redirect(site_url('login'), 'refresh'); 
+0

替代'redirect(base_url()。'login');'?我试过了,但它不起作用。点击后退按钮后,我仍然可以进入页面。 – Atasha

+0

你又添加了第二个参数?我与位置重定向有同样的问题,但我似乎解决了添加第二个参数的问题。 – Repox

+0

我的重定向工作正常。我只是想让每个页面都刷新,这样当后退按钮被点击并且会话刚刚未被设置时,当用户单击后退按钮时,他/她将被重定向到登录页面。 – Atasha