繁体   English   中英

在同一控制器中以其他方法访问会话数据在Codeigniter中不起作用

[英]Accessing session data in other method in same controller is not working in codeigniter

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

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中将会话设置为默认加载,并且还尝试在构造函数中加载,但是没有任何效果。

有人可以告诉我为什么会这样吗?

提前致谢。

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

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

这救了我一命。

您正在使用以下命令:

$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会话类

这来晚了,但我认为这是正确的答案,它将对遇到相同问题的人有所帮助。

通过以下方式访问一个变量:

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

然后:

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

要打印整个数组,只需执行以下操作:

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

然后:

回声$数据;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM