【发布时间】:2011-07-08 12:28:37
【问题描述】:
我正在使用 jquery 插件 swfupload。
这个插件,SWFUpload 与 php 文件 upload.php 一起工作(将上传的文件信息发送给它,并将 php 保存到目录)。
现在我的问题是,在我网站的每个页面中,我都包含 page_protect();
这会启动会话检查并设置会话变量,例如用户 ID。
现在在upload.php 中我希望输出示例。 “好的 id 123,你成功了!!”
id 123 应该是那里输出的 $_SESSION['userID']。我试图输出这个,但它就像 $_SESSION['userID'] 中没有任何内容。
我不明白,它适用于我的所有其他页面。
但是当 SWFupload 使用 flash 读取和执行upload.php 时似乎是另一个/消失并且无法获取变量?
对此有解释吗?我该如何解决这个问题?
更新
我尝试用 action="upload.php" 制作一个 html 普通文件表单,并让 upload.php 提交 session_id()。当我这样做时,我得到了与其他网站相同的 ID,并且我的变量 userID 工作得很好!
然后我尝试在 swfupload 上将 debug 设置为 true,并使 upload.php 输出相同的 session_id,这一次是另一个 session_id 而不是另一个包含 user_ID 变量的 session_id。
所以不知何故,当它使用 flash 并执行 upload.php 时,它会启动一个全新的会话,因此其中没有保存任何变量。虽然这只是我目前发现的一个理论。
更新
好的,现在我发现 session_id 是在 SWFUpload 配置中发送的,
post_params: {"PHPSESSID" : "<?php echo session_id(); ?>"},
我可以在代码后面的 upload.php 中看到,在打印 session_id() 之后,它实际上更改了会话 ID:
// Code for Session Cookie workaround
if (isset($_POST["PHPSESSID"])) {
session_id($_POST["PHPSESSID"]);
} else if (isset($_GET["PHPSESSID"])) {
session_id($_GET["PHPSESSID"]);
}
我在打印出 session_id() 之前拿了这个并放置了它,现在它打印了与之前相同的 session_id(),变量 userID 存储在其中。
现在我尝试再次输出 userID,但现在我收到 Undefined index: userID 错误,就像它尚未设置一样。
我也试过设置userID以外的其他变量,'test'值为123,设置在表单上传页面,想在upload.php页面输出,结果输出不了。
我该如何解决这个问题?请
【问题讨论】:
-
愚蠢的问题:你是否在upload.php中包含
page_protect()? :) 你如何检查upload.php 是否输出了正确的数据?记录到文件?