无法在多个页面/视图上访问codeigniter会话中的用户数据

时间:2011-12-20 10:58:05

标签: codeigniter codeigniter-2 php

我在codeigniter 2.x会话类中遇到问题。我想在用户登录后在我的页面上使用userid进行全局访问

我有2个视图和1个控制器 一个视图,当用户提交表单时,我有一个登录表单 我通过调用控制器中的方法

来验证它并创建会话用户数据
function create_session($data) {        
        $mydata = array(
                   'userid'  => $data,
                   'role'     => $role,
                   'logged_in' => TRUE
               );

        $this->session->set_userdata($mydata);

        return;
    }

然后加载我的第二个视图 我有这个观点

print_r($this->session->userdata); 

并打印出正确的结果

但是当我点击导航中的第一个视图时 我喜欢那个

[userdata] => 
它是空的 我的会话配置为

$config['encryption_key'] = 'askdfjowieuriomzx,mv';
$config['sess_cookie_name'] = 'wana_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'wana_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300; 

我搜索了论坛,但我无法解决这个问题 请解决此问题或提出替代方法。

4 个答案:

答案 0 :(得分:1)

除了我写的评论之外,请确保在您需要的每个页面上加载会话库,或者使用自动加载。

答案 1 :(得分:1)

如果你设置了userdata,你可以从主控制器访问它,将它分配给受保护的var(数组),任何扩展你的主控制器的东西都应该有权访问它。

class Main_Controller extends CI_Controller
{
protected $_session_data=array();

public function __construct()
{
   parent::__construct();

   if($this->session->userdata)
   {
      foreach($this->session->userdata as $k => $v)
      {
         $this->_session_data[$k] = $v;
      }
   }
}
}

扩展主控制器的一些课程

class someclass extends Main_Controller
{

public function __construct()
{
  parent::__construct()
}

public function view1()
{
   $this->load->view('view1', array('session_data'=>$this->_session_data))
 }

 public function view2()
 {
    $this->load->view('view2', array('session_data'=>$this->_session_data))
 }
}
每个视图中的

var_dump($session_data['uid'])


foreach($session_data as $k){}

答案 2 :(得分:1)

$config['sess_encrypt_cookie']  = FALSE;

这是我的配置,只是猜测

答案 3 :(得分:1)

尝试在config.php

中更改对'gmt'的引用

$config['time_reference'] = 'gmt';代替$config['time_reference'] = 'local';