【问题标题】:Accessing session data in other method in same controller is not working in codeigniter在同一控制器中以其他方法访问会话数据在 codeigniter 中不起作用
【发布时间】:2014-11-25 06:32:05
【问题描述】:

我有一个从模型中获取数据并将该数据存储在会话变量中的函数:

public function fetchData() {
   $somedata = $this->some_model->some_function();
   $this->session->set_userdata('mydata',$somedata);
}

现在,如果我以相同的方法访问会话并打印,则它可以工作,但是当我以其他方法访问此会话变量时,它就不起作用了。

public function showData() {
   $mydata = $this->session->userdata('mydata');
   print_r($mydata); // it prints nothing
}

当我在 showData() 方法中打印会话时,它只打印用户详细信息:

Array
(
[session_id] => 9c7bc7a7a8acad514d4ece2c841c1403
[ip_address] => 192.168.0.115
[user_agent] => Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0
[last_activity] => 1416898254
[user_data] => 
[user] => testuser
[currentUser] => testuser
[userID] => 1
[email_address] => testuser@gmail.com
[first_name] => Test
[last_name] => User
[logged] => 1
[account_type] => admin
[currentUserName] => Test user
) 

当然,我已经在 autoload.php 中设置了会话以默认加载,并尝试在构造函数中加载,但没有任何效果。

谁能告诉我为什么会这样?

提前致谢。

【问题讨论】:

  • 检查您是否正在取消设置会话数据。
  • 我检查过了,我没有在任何地方取消设置会话数据。
  • 包含会话库吗?还要检查你的 $somedata 是否有值
  • 试试print_r($this->session);,看看你会得到什么。
  • 是的,我已将库包含在 autoload.php 和构造函数中,但没有任何工作。

标签: php codeigniter session session-variables


【解决方案1】:

我通过将会话存储在数据库中解决了这个问题。

为了保存大数据,我使用数据库(请参阅http://codeigniter.com/user_guide/libraries/sessions.html 中的“将会话数据保存到数据库”)。

这救了我的命。

【讨论】:

    【解决方案2】:

    你正在使用这个命令:

    $this->session->set_userdata('some_name', 'some_value');
    

    但是这个命令只在你想一次添加一个值时使用,并没有说你可以使用一个值/行作为数组,所以我建议你使用:

    // pass the array to userdata, and not one value containing an array.
    $this->session->set_userdata('array_value');
    

    理解/阅读您的代码会更好。看来您正在尝试输出 整个数组,对吗? 很简单:

    print_r($this->session->all_userdata()); // prints all userdata
    

    它会返回一个像这样的关联数组:

    Array
    (
        [session_id] => 4a5a5dca22728fb0a84364eeb405b601
        [ip_address] => 127.0.0.1
        [user_agent] => Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7;
        [last_activity] => 1303142623
    )
    

    当然,使用您定义的关联词。如果您只想打印一行,请使用:

    // print one row, i.e: 'session_id', 'ip_address'.
    print_r($this->session->userdata('associative_value_you_defined'));
    

    欲了解更多信息,请访问CodeIgniter Session Class

    【讨论】:

    • 是的,你是对的,但我也尝试过打印所有用户数据,但只打印登录详细信息,当我发现这是由于存储大量数据而导致的问题时,我将会话保存在 db现在一切都很好。
    【解决方案3】:

    这来晚了,但我觉得这是正确的答案,它会帮助有同样问题的人。

    以这种方式访问​​一个变量:

    $data = $this->session->userdata('mydata');

    然后:

    回显 $data['last_name']; //访问姓氏变量

    要打印整个数组,只需:

    $data = $this->session->all_userdata();

    然后:

    回显 $data;

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2017-08-03
      • 2017-05-08
      • 1970-01-01
      • 2018-07-21
      • 2020-05-24
      • 2017-06-12
      • 1970-01-01
      • 2017-08-04
      相关资源
      最近更新 更多