我在本地开发服务器和远程web服务器上都使用phpversion5.3.2。
我试着用
uploadify
将多个文件上载到服务器。在接收脚本中,我想使用会话中存储的数据,但是因为uploadify使用flash将文件发送到脚本,所以它不会发送会话cookie。
在我的脚本中,我有以下内容:
<?php
ini_set('session.use_only_cookies', FALSE);
ini_set('session.use_trans_sid', TRUE);
session_name('SESSNAME');
session_start();
print_r($_SESSION);
脚本url类似于script.php?SESSNAME=
会话ID
我也尝试过使用透明会话id(如上所述),并使用session\u id($\u GET['SESSNAME'])手动设置id。
总是
使用浏览器直接访问脚本并发送当前会话id时有效,即使手动删除会话cookie也是如此。它也总是在我的本地服务器上与uploadify一起工作。然而,在远程服务器上使用uploadify时,它的工作时间约为20%,完全是随机的。没有模式。当我加上
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
本地服务器信息:
http://www.dur.ac.uk/n.r.brook/info_local.php
http://www.dur.ac.uk/n.r.brook/info.php
一些猜测。。。
做一些挖掘,看看脚本接收到的标题,我想我可能已经确定了问题所在。
使用uploadify时需要发送会话id,因为flash在使用FileReference.upload()时不发送cookies(我想!)方法。但是,在负载平衡环境(如远程服务器)中,除了会话id之外,还有BALANCEID cookie,它确定用户当前使用的服务器。Flash不发送这个cookie,所以负载平衡器有时会将请求发送到另一个服务器,而在这个服务器上会话不存在。
所以,如果以上都是真的,那么我的问题是我该怎么做才能让flash通过上传来发送这些数据,这样负载均衡器就知道该使用哪台服务器了?或者这是一个失败的事业?
经过进一步研究,我发现了以下帖子-
http://swfupload.org/forum/generaldiscussion/977
这表明无法使用FileReference.upload()发送Cookie,因此,如果要使用会话数据,uploadify不能与负载平衡服务器一起使用。不过,我想我现在将尝试一种解决方案,将链接到会话id的数据保存到一个文件中。uploadify接收脚本可以打开此文件并提取所需的数据。
这是我第一次使用任何基于Flash的东西,它并没有改善我对这项技术的看法!