【问题标题】:PHP Sessions and Javascript CallbacksPHP 会话和 Javascript 回调
【发布时间】:2009-12-15 05:16:59
【问题描述】:

我正在使用 swf-upload 来处理我正在处理的网站上的文件上传。

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

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

有什么想法吗?

【问题讨论】:

  • 能贴出ajax回调的代码吗?
  • 唯一真正的代码是:session_start(); print_r ($_SESSION);

标签: php ajax apache session swfupload


【解决方案1】:

这是 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"]);
 }

【讨论】:

    【解决方案2】:

    也许您可以通过 PHPSESSID 在您的 ajax 网址中显式传递会话 ID?你可以用 session_id() 函数http://pl2.php.net/manual/en/function.session-id.php阅读它

    【讨论】:

    • 这是一个可能的安全风险。我不建议这样做
    • 我不认为在这种特定情况下这是严重的安全风险。特别是如果您重新生成会话 ID 并且不接受以前未知的会话 ID。无论如何,在应用该解决方案之前,您应该阅读有关保护自己免受会话劫持的信息。
    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 2010-11-20
    • 2010-12-17
    • 2019-04-24
    • 1970-01-01
    • 2011-06-21
    • 2017-07-08
    • 2016-06-10
    相关资源
    最近更新 更多