【问题标题】:Avoid going to homepage when clicked Back button after logout注销后单击返回按钮时避免进入主页
【发布时间】:2013-03-14 08:32:51
【问题描述】:

我正在使用 Codeigniter 最新版本。我正在使用 php 进行 facebook 连接。 我按照 phpacademy 的视频教程进行了 facebook 登录。 一切正常,但是在我点击注销后,我调用了一个函数注销:

$this->session->unset_userdata('is_logged_in');
session_destroy();
redirect('main/fb_login','refresh');

并激活登录功能并返回登录视图。但我的问题是,单击浏览器上的“返回”按钮后,我的主页带有“注销”按钮,并且根本没有刷新。有什么解决办法吗?

【问题讨论】:

  • 那可能来自浏览器缓存吧?
  • @Mahdi 我似乎不明白,但是当其他所有站点都可以正常工作时。我的代码应该有问题。
  • 哦,我的错,我弄错了......
  • 我们可以在该页面上查看您的缓存标题吗?同理This popped up under related。这有帮助吗?
  • @Mirage 我已经更新了我的答案,看看吧!

标签: php codeigniter codeigniter-2


【解决方案1】:

希望您在视图中使用模板,这会很轻松,但请确保它位于您不希望通过后退按钮访问的每个页面的头部。

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE, NO-STORE, must-revalidate">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT=0>

只是为了解释正在发生的事情。该页面正在从您的浏览器缓存中加载,这意味着浏览器认为您的用户仍处于登录状态。以上几行使浏览器在每次加载时都重新验证该页面,并且不会从它自己的缓存中加载它。

【讨论】:

  • 我加了这个,还是一样。还有其他建议吗?
  • 我在我的网页顶部添加了这个header("Cache-Control: no-store, no-cache, must-revalidate"); 以及您的代码。非常感谢您的帮助。
【解决方案2】:

在主页函数的开头添加以下代码行:

 if(!$this->session->userdata('username')) header('location: main/fb_login');

编辑:试试下面的代码。

    public function home() 
    { 
        if(!$this->session->userdata('username')) header('location: main/fb_login');
        $this->load->view('home');
    }

【讨论】:

  • 这是我的主页功能,public function home() { if($this-&gt;session-&gt;userdata('is_logged_in')){ $this-&gt;load-&gt;view('home'); } else { redirect('main/fb_login','refresh'); } }我在哪里添加这个?
  • 页面正在从浏览器缓存中加载,没有多少代码可以在 PHP 中修复它,因为从技术上讲,页面不会再次加载,只是显示已经存在的内容。
【解决方案3】:

您必须使用 if 条件来检查用户是否已登录:

  function homepage(){     
     if($this->session->userdata('is_logged_in')){
        //code for homepage
        $this->load->view('homepage');//there should be file in you view folder homepage.php
     }else{
        redirect('main/fb_login','refresh');
     }
  }

这将阻止进入主页。

并确保您已加载会话库:

  $autoload['libraries'] = array('database', 'session','form_validation');

如果上述陈述中的每件事都很好,那么请尝试编写

 session_start(); 

在这个语句之后的构造函数中

 parent::__construct();

希望它会有所帮助!

【讨论】:

  • 是的,我添加了这个。但是当我做http://localhost:81/tag/main/logout 然后点击后退按钮时,我得到了我的登录页面。同样的问题。
  • 在我的 autoload.php 中启用
  • 无法正常工作,因为该页面是从浏览器缓存中调用的,但尚未加载。
猜你喜欢
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 2012-03-08
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多