Flash会丢失会话数据


Session data is losing with Flash

我使用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);