![](/img/trans.png)
[英]How do I store database sessions in CodeIgniter with multiple databases?
[英]How to store array in CodeIgniter sessions?
我正在使用setActiveId
方法调用控制器,并在会话中存储1个数组,并在使用var_dump($this->session->all_userdata())
存储后显示,它显示得很好,但是当我在其他方法中打印会话时在同一控制器中显示checkinkingPermission
那么会话中的数组为空。
现在,我将所有步骤重复一个附加步骤。
我确实像在存储之前和之后一样在会话中存储数组,像这样在会话中存储一个虚拟变量,
$this->session->set_userdata('dummy','tesing');
并再次使用var_dump($this->session->all_userdata())
打印,它将显示所有具有数组和最后一个虚拟变量的会话,并且当签入checkinkingPermission
时,会话和虚拟变量中的数组会完美显示(它解决了我的问题,但它的粗糙性解)。
我想知道是否有任何遗漏或在第一种情况下无法保存数组的问题(数组不大于4Kb(CI会话限制))。
更新资料
来自名为connections_model的模型的方法
public function setActiveFriend($id) {
$this->load->model('friend_model');
$this->session->set_userdata('AF',$id);
if($id==$this->session->userdata('userid'))
{
$this->session->set_userdata('MEOWN',1);
}
else
{
$this->session->set_userdata('MEOWN',0);
}
$this->friend_model->setFP($id); // Calls Here a method that is defined in another model
}
在friend_model中定义的另一种方法
public function setFriendPermissions($id) {
$this->session->set_userdata('CFP',array());
$this->db->where('user_id',$id);
$locs = $this->db->get('friend_p')->result_array();
if(is_array($locs))
{
foreach($locs as $loc)
{
array_push($this->session->userdata['CP'],$loc['perm_id']);
}
}
$this->session->set_userdata('dummy','tesing'); // Important Line
}
在上面的方法中,如果要在同一方法中查看会话值,则在会话数组中设置值,然后设置并查看它,但是如果我在connections_model文件的任何方法中打印会话,则该数组为空。
重要说明:如果我在这行中写了$this->session->set_userdata('dummy','tesing');
然后会话数组保存并在所有方法中查看,如果我不写,那行会话数组为空。
您没有正确访问会话数据:
$this->session->userdata['CURRENTFPERMISSIONS']
那就是你所拥有的。 请记住,$ this-> session-> userdata是一个函数,而不是一个数组,也就是说,尝试一下
array_push($this->session->userdata('CURRENTFPERMISSIONS'),$locpermission['perm_id']);
我不建议对数组使用所有大写键,因为该约定应该用于常量。
除上述内容外,请尝试更改此内容:
if(is_array($locpermissions))
{
foreach($locpermissions as $locpermission)
{
array_push($this->session->userdata['CURRENTFPERMISSIONS'],$locpermission['perm_id']);
}
}
对此
if(is_array($locpermissions))
{
$tmpArr = $this->session->userdata('CURRENTPERMISSIONS');
foreach($locpermissions as $locpermission)
{
array_push($tmpArr,$locpermission['perm_id']);
}
$this->session->userdata('CURRENTPERMISSIONS',$tmpArr);
}
虽然,我越看待您的代码,却越不理解为什么要继续进行并在会话结构中设置空白数组(如果仅在条件条件中填充它的话)。 可能想重构一下
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.