2009-12-14 115 views
0

我正在使用swf-upload处理我正在处理的网站上的文件上传。PHP会话和Javascript回调

问题是捕获函数,称为swf-upload.php。如果我直接访问它的URL,它可以正常工作,它正确读取会启动会话并获得用户权限,但是当网页使用ajax回调调用它时,它会声明会话是空的。

我正在使用错误处理程序和输出日志记录的组合来找出它在做什么,在直接访问和ajax访问之间的代码路径中完全没有区别。

任何想法是什么?

+0

你可以发布ajax回调代码吗? – 2009-12-14 15:36:24

+0

唯一真实的代码是: \t session_start(); \t print_r($ _SESSION); – Meep3D 2009-12-14 15:46:43

回答

3

这在SWFUpload的一个已知的问题,你需要通过你的会话ID在给SWFUpload的构造函数,然后重新明确使用你的会话ID在你的远程文件重新启动此会话阅读像这样通过:

// in your javascript file 
swfu = new SWFUpload({ 
    upload_url: "http://<?=$_SERVER['HTTP_HOST']?>/scripts/swfupload2/upload.php", 
    post_params: {"PHPSESSID": "<?=session_id()?>"} 
} 

// in your PHP file 
if (isset($_POST["PHPSESSID"])) { 
    session_id($_POST["PHPSESSID"]); 
} 
1

也许你可以在你的ajax url中通过PHPSESSID显式传递session id?您可以使用SESSION_ID()函数http://pl2.php.net/manual/en/function.session-id.php

+1

这是一个可能的安全风险。我不会建议这个 – 2009-12-14 15:49:11

+0

我不认为在这个特定情况下这是严重的安全风险。特别是如果您重新生成会话ID并且不接受以前未知的会话ID-s。无论如何,您应该在应用该解决方案之前阅读有关保护自己免受会话劫持的信息。 – 2009-12-14 22:35:00