Flash上​​传器有自己的会话ID .....为什么?

时间:2009-02-17 18:09:26

标签: php flash

我现在正把我的头撞到桌子上。我有一个flash批量上传器,它通过upload.php放置每个文件,缩略图像,并将它们移动到适当的目录。当我在IE上传时,它运行完美(从未想过我会说这个),但在Firefox中,当flash执行upload.php时它有自己的会话变量,这与用于浏览其余部分的会话变量不同。站点,所以登录的用户不再登录,因此他们的用户ID不会被读取也不会插入到数据库中,而且只需要这样一段简单的代码:

$_SESSION["uploaded_ids"][] = $inserted_id;

使用最后一个ID覆盖整个数组,因为它无法读取它以附加它。

我该怎么办?有问题的上传者是:

MultiPowUpload

5 个答案:

答案 0 :(得分:1)

Flash DOES可以正常访问您的cookie,但在MSIE中FileReference是一个奇怪的例外,因为您显然已经注意到不会发送当前的会话cookie。

通过将会话ID传递给flash(使用flashvars或单独的远程服务),然后在发布FileReference上传时在查询字符串中传递会话ID,我解决了这个问题。然后,您可以使用强制ID在PHP中启动会话。

答案 1 :(得分:0)

Flash连接充当单独的浏览器,闪存无法直接访问您的Cookie,因此通常无法发送phpsessid。 (除非它通过JS调用绕过它)

但是MultiPowUpload表示他们已经在v2.0中解决了这个问题,所以只要你使用的是v2.0并且没有配置sendBrowserCookie = false就行了。

我们的团队通过在创建页面时在$ _SESSION中生成令牌来解决此问题。然后将此令牌添加到上传URL并且php将文件与xcache中的此令牌相关联。然后一个oncomplete ajax函数用正确的phpsessid和token调用php来配对它们。

答案 2 :(得分:0)

如果您想鼓励Adobe修复此错误,请参阅此问题的错误跟踪链接:

https://bugs.adobe.com/jira/browse/FP-1044

不幸的是,您必须创建一个帐户才能查看问题,但无论如何都存在。

还有其他3个链接,但是堆栈溢出阻止我发布它们,因为我的声誉太低了。

答案 3 :(得分:0)

当你向PHP发送请求时,flash应该用它传递当前的会话ID,不幸的是flash没有做同样的事情所以需要将会话ID作为URL变量传递给php页面,以便你的php获得该会话。有关详情,请查看this.

答案 4 :(得分:-3)

如果php文件是通过某种形式的ajax执行的,而不是直接从浏览器执行,我相信会话不是持久的。 IICRC Firefox将ajax调用视为新的浏览器会话。

如果听起来像是这种情况,我通常会通过手动将PHPSESSID附加到ajax调用的末尾来解决这些问题。希望这会有所帮助。