我使用Flash上传器(uploadify, swfupload)与CodeIgniter,想要获得会话数据。我发现flash不发送会话数据,所以我设置了$config['sess_match_useragent'] = FALSE;
现在,例如,我已经设置会话值myname
在会话,我可以得到它在我的后端PHP脚本使用Internet Explorer。:
Array
(
[session_id] => f4l82aa3f82rd4b2ed682e0e132d7a72
[ip_address] => 127.0.0.1
[user_agent] => Shockwave Flash
[last_activity] => 1310546544
[myname] => test
)
但是问题是它在Internet Explorer上仅工作得很好。ie浏览器下,使用flash前后session_id
值保持一致。但是在Firefox和所有其他浏览器上,session_id
被更改,我只能获得session_id, ip_address, user_agent, last_activity 但是而不是myname
。
Array
(
[session_id] => c2cafff6daadc5148e6646s8c4c2aafa
[ip_address] => 127.0.0.1
[user_agent] => Shockwave Flash
[last_activity] => 1310548338
)
通过浏览和询问之前关于SO的问题,我发现由于Flash删除了会话数据,我应该将当前会话ID发送到后端脚本,然后使用该会话ID恢复会话。因此,我使用原始会话ID设置session_id。
$original_session_id = $_REQUEST['session_id'];
$newdata = array(
'session_id' => $original_session_id,
);
$this->session->set_userdata($newdata);
现在我可以看到,会话ID设置成功,它是一样的,但问题是,我仍然无法获得其他会话数据,如myname
。为什么会这样呢?我不应该得到它,因为现在我的session_id
是一样的。会话数据到哪里去了?我现在如何检索它?
您可以使用session_id()
重新打开会话,如下所示:
session_id($original_session_id);
session_start();
$this->session->set_userdata($_SESSION);