【发布时间】:2026-01-04 10:45:01
【问题描述】:
我正在使用方法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
}
在上述方法中,如果我想在同一方法中查看会话值,我会在会话数组中设置值,然后设置并查看它,但如果我在 connection_model 文件的任何方法中打印会话,则数组为空。
重要
如果我写了这一行 $this->session->set_userdata('dummy','tesing'); 然后会话数组保存并在所有方法中查看,如果我不写那行会话数组为空。
【问题讨论】:
-
为了让问题更清楚,你是说当你在会话中存储一个字符串时,它在第二种方法中可用,但在存储数组时它不是?
-
当我在会话中保存数组时,它会存储但不会在其他方法中显示,但是当我存储数组并在存储数组之后存储一些字符串时,数组会永久存储,否则你或我可以发布一些我使用的代码吗?
-
你在哪里写负载
$this->load->library('session');? -
你检查过你的会话生命周期吗?
-
@Zarazthuztra 我用一些代码更新了我的问题
标签: php arrays codeigniter session