Php Flash uploader有自己的会话id。。。。。为什么?

Php Flash uploader有自己的会话id。。。。。为什么?,php,flash,Php,Flash,我现在正把头撞在桌子上。我有一个flash批量上传器,它通过upload.php将每个文件放入其中,upload.php会绘制图像的缩略图,并将它们移动到适当的目录中。当我在IE中上传时,它的功能完美,我从来没有想过我会这么说,但在Firefox中,flash执行upload.php时,它有自己的会话变量,这与用于浏览网站其余部分的会话变量不同,因此登录用户不再登录,因此他们的用户ID不会被读取或插入数据库,还有一段简单的代码如下: $_SESSION["uploaded_ids"][] = $

我现在正把头撞在桌子上。我有一个flash批量上传器,它通过upload.php将每个文件放入其中,upload.php会绘制图像的缩略图,并将它们移动到适当的目录中。当我在IE中上传时,它的功能完美,我从来没有想过我会这么说,但在Firefox中,flash执行upload.php时,它有自己的会话变量,这与用于浏览网站其余部分的会话变量不同,因此登录用户不再登录,因此他们的用户ID不会被读取或插入数据库,还有一段简单的代码如下:

$_SESSION["uploaded_ids"][] = $inserted_id;
仅用最后一个ID覆盖整个数组,因为它无法读取该ID来追加它

我能做什么?问题中的上载程序是:


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


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

Flash连接充当单独的浏览器,Flash无法直接访问cookies,因此通常无法发送phpsessid。除非它通过JS调用绕过这个

但是MultiPowUpload说他们在v2.0中解决了这个问题,所以只要您使用v2.0并且没有配置sendBrowserCookie=false,它就应该可以工作


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

Flash确实可以正常访问您的cookie,但FileReference在MSIE中是一个奇怪的异常,正如您明显注意到的,它不会发送当前会话cookie


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

如果您希望鼓励Adobe修复此错误,下面是此问题的错误跟踪链接:

不幸的是,您必须创建一个帐户来查看问题,但问题仍然存在


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

当您向PHP发送请求时,flash应该传递当前会话id,不幸的是,flash没有这样做,所以需要将会话id作为URL变量传递到PHP页面,以便您的PHP获得该会话。要了解更多信息,请检查

不幸的是,这完全是不真实的。ajax调用通常会保留会话cookie。@Bittarman因此,当会话未在ajax调用中进行时,将会话id附加到url不是一个有用的建议?PHP实际上在某些情况下会推荐它,并在适当的情况下为您推荐PHP.net/manual/en/session.idpassing.PHP。也许情况并非总是如此,但我不知道你怎么会认为我4年多前的回答毫无帮助。