0

我正在开发一个用 codeigniter 编码的网站。目前,我的登录系统遇到问题。当注册用户成功登录并点击浏览器后退按钮时,他再次重定向用户登录页面。

在登录视图加载的登录控制器中,我设置了一个条件,即如果用户已经登录,则将他重定向到仪表板。但是成功登录后,如果我单击浏览器后退按钮,它会再次重定向到登录页面。

我的控制器功能,其中登录视图加载为:

    if($this->session->userdata('logged_in') && $this->session->userdata('logged_in') !=''){

        header('location:'. base_url().'message/inbox');

    }
    else
    {
        $this->template->load('template', 'login');
    }

我是codeigniter的新手,对它了解不多。请任何人帮助我并指出我的代码中有什么问题。

谢谢。

4

4 回答 4

1

后退按钮通常会加载前一页的缓存版本。您的问题与 CodeIgniter 无关。

阅读本文以解决您的问题。虽然它不适用于 PHP,但它会向您展示如何正确设置您的标头并在登录页面打开时删除logged_in 会话变量。

编辑

所以标题需要采用这种格式:

header('Expires: -1'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Pragma: no-cache');

如果您知道如何用纯 PHP 解决问题,那么 CodeIgniter 中的方法是相同的。只需清除您的会话或强制重定向(无论您喜欢哪个),同时确保缓存设置为以正确的方式工作。

于 2013-09-17T10:42:26.967 回答
0

您是否在控制器构造函数中加载了会话?

$this->load->library('session');

于 2013-09-17T10:36:57.513 回答
0

在每个控制器类的每个构造中使用下面

if(!$this->authentication->try_session_login()){
    redirect('manage/login');
    }

此行的详细信息$this->authentication->try_session_login:-

authentication = create an libyrary function named authentication. 
                In that library define try_session_login() function.

也使用此身份验证库进行登录。

我个人在我的应用程序中使用了这个过程。

于 2013-09-17T10:41:42.320 回答
0

如果您单击浏览器后退按钮,它会从浏览器历史记录中加载页面。它会始终向您显示登录页面。尽管您已经进行了一些检查,但它会从历史记录中加载页面。为此,您需要禁用浏览器后退按钮。

现在,如果您将代码放在每个函数的开头,例如

if(!$this->session->userdata('logged_in'))
{
    redirect('controller_name/function_name','refresh');
}

它将检查会话并相应地工作。

于 2013-09-17T11:21:32.833 回答