只有控制器的某些功能无法访问codeigniter中的会话数据

时间:2015-01-15 06:50:58

标签: php codeigniter session

我是codeigniter的新手。我在一个控制器中设置会话。我可以从另一个控制器的某些功能访问该会话数据。但只有部分功能无法访问会话数据。请帮助我为什么会这样。

我按

设置会话
$admin_details=array(
    'admin_id'=>$admin_id,
    'admin_name'=>$admin_name,
    'email'=>$email,
    'is_admin_logged_in'=>true,
    'user_type'=>'admin'
    );
$this->session->set_userdata($admin_details);

我通过

访问它
function manage_profile()
{

    if(!$this->session->userdata('is_admin_logged_in'))
    {
        $this->load->view('admin/test');
    }
}

但它正在加载视图'test'。我已加载会话库并设置加密密钥。它适用于同一控制器中的其他一些功能。

2 个答案:

答案 0 :(得分:0)

这是因为当您输入$this->session->userdata('is_admin_logged_in')时,您正在访问'容器'为会议。

$admin_details=array( 'admin_id'=>$admin_id, 'admin_name'=>$admin_name, 'email'=>$email, 'is_admin_logged_in'=>true, 'user_type'=>'admin' ); $this->session->set_userdata($admin_details);

你实际上需要这样做: $this->session->set_userdata('name_your_session_something',$admin_details);

然后访问它:

$session = $this->session->userdata('name_your_session_something'); $admin_logged = $session['is_admin_logged_in'];

if(!$admin_logged){ //if admin is not logged in do this }

这是一个简单的阵列情况。

所以这应该是代码:

设置会话:

$admin_details=array( 
        'admin_id'=>$admin_id, 
        'admin_name'=>$admin_name, 
        'email'=>$email, 
        'is_admin_logged_in'=>true, 
        'user_type'=>'admin' 
);
$this->session->set_userdata('name_your_session_something',$admin_details);

获取会话:

$session = $this->session->userdata('name_your_session_something'); 
$admin_logged = $session['is_admin_logged_in'];

答案 1 :(得分:0)

不知道它有帮助与否,但重要的是,

如果您正在使用iframe并使用ajax调用获取内容,则可能会发生这种情况。这是因为codeIgniter中的会话类会更新每$config[‘sess_time_to_update’]分钟的会话信息。

这是阻止会话劫持的非常有用的安全功能。 如果您通过AJAX获取详细信息,会话将更新并生成新的会话ID,但浏览器中的cookie不会更新。因此,下次浏览器请求新页面时,它会发送一个包含错误会话ID的cookie会话变得无效,导致会话数据丢失。

This thread可能会帮助您克服这种情况。

对实际找到解决方案的人的信用。 感谢。

第1步: 在constants.php(application / config /)中,您必须添加以下行来定义AJAX请求。

// Define Ajax Request
 define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
//  

第2步: 在(应用程序/库)下创建一个名为MY_Session.php的新文件

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Session extends CI_Session 
{

/**
* Update an existing session
*
* @access    public
* @return    void
*/
    function sess_update()
    {
       // skip the session update if this is an AJAX call!
       if ( !IS_AJAX )
       {
           parent::sess_update();
       }
    } 

}

/* End of file MY_Session.php */
/* Location: ./application/libraries/MY_Session.php */