如何在codeigniter中维护会话

时间:2013-09-17 10:35:13

标签: php codeigniter

我正在使用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 个答案:

答案 0 :(得分:1)

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

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

修改

所以标题必须采用以下格式:

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

如果您知道如何在普通PHP中修复问题,那么CodeIgniter中的方法是相同的。只需清除会话或强制重定向(根据您的喜好),同时确保缓存设置为正常工作。

答案 1 :(得分:0)

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

  

$这 - >负载>库( '会话');

答案 2 :(得分: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.

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

我个人在我的申请中使用这个过程。

答案 3 :(得分:0)

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

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

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

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