2011-04-04 127 views
2

我开始为我的项目使用codeigniter。我有我的网站的用户身份验证系统。我已经看到了来自nettuts的视频的登录信息。我很困惑为什么注销无法正常工作。代码点火器注销功能

我在我的登录控制器中有以下注销功能。

function logout() { 
     $this->session->sess_destroy(); 
     redirect('main'); 
    } 

如果我点击注销按钮,我将用户重定向到主页面。但是,在将用户重定向到主页面后,如果单击浏览器上的后退按钮,我会在页面顶部看到注销和我的名字。我需要在我要去的地方错了或者一些帮助有代码,我在我的控制器缺少

由于任何重要的一块提前

编辑

我想我找到了解决办法。我应该将以下代码添加到相应的控制器中

$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0"); 
$this->output->set_header("Pragma: no-cache"); 

回答

3

我认为这是浏览器缓存问题。如果您点击返回,您实际上正在看到缓存页面,就像您登录时那样。

尝试并在返回到注销页面后立即点击F5。它现在应该显示您已注销。

+0

是的,你是对的。这不是安全缺陷吗?当我点击注销时,虽然我点击后退按钮,但我认为我的代码不应该允许用户看到缓存页面,我也相信。如果用户在注销之前已经看到一些重要信息,如果某个用户点击了后台页面,他将看到最后一次浏览的页面。如何摆脱这个问题。 – user525146 2011-04-04 23:11:01

+0

您可以尝试在所有登录页面上放置缓存标头,这是目前我能想到的唯一解决方案......实际上,大多数网站似乎都存在此问题,包括此问题。 – jfoucher 2011-04-05 07:48:09

+0

将@amit的建议整合到您的答案中? – bacar 2014-09-04 08:03:05

3

添加标题,我的主要构造解决我的问题与IE7:

$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0"); 
$this->output->set_header("Pragma: no-cache");