【问题标题】:Making file_get_contents() session aware in PHP在 PHP 中使 file_get_contents() 会话感知
【发布时间】:2010-10-09 20:41:49
【问题描述】:

序言:我的应用启用了 mod_rewrite,并且我有 index.php 页面,该页面基于 Request_URI 下载各种页面并将它们打印为页面内容。

问题:File() 或 File_get_contents() 函数非常适合下载我的其他应用程序页面。但是,一旦我尝试使用它下载启用会话的页面,我就会开始遇到问题。

主要问题是当我尝试将现有会话 ID 从我下载的页面传递给 url 时,例如

  $url = "http://localhost/EmplDir/AdminMenu.php";
  return implode('',file($url. "&" . session_name() . "=". session_id()));

我的页面从不加载(或 file() 从不加载内容)。 我怀疑我应该在这里使用 curl 函数,但它有太多选择。 我的建议是 curl options 用于使可下载页面了解当前 PHP 会话会有所帮助。

附:以上似乎适用于 Windows 和 Linux。

【问题讨论】:

    标签: php session curl file-get-contents


    【解决方案1】:

    如果你的脚本没有改变任何superglobal variables,你可以只包含它:

    ob_start();
    include $_SERVER['DOCUMENT_ROOT'].'/EmplDir/AdminMenu.php';
    return ob_get_clean();
    

    【讨论】:

    • 如果您需要在 url 中添加其他参数,这将不起作用 :(
    • @OZZIE 为此使用$_GET
    【解决方案2】:

    您没有使用 ? 将查询字符串与 URL 的其余部分分开

    试试

    return file_get_contents($url. "?" . session_name() . "=". session_id());
    

    您还需要确保服务器不使用session.use-only-cookies 配置设置。

    脚本没有理由不看到查询字符串并对其采取行动,您可以通过编写一个只执行 var_dump($_GET) 的脚本来说服自己,并像上面那样请求它。如果您在输出中看到查询参数,那么您只需调试您的脚本,看看它为什么在给定会话 ID 的情况下没有按预期运行。

    注意:我假设您希望从与您的应用程序相同的域中请求文件,否则将会话 ID 用于远程站点并没有多大意义。

    【讨论】:

    • 它会生成一个有效的 URI。 URI 路径中允许使用 &
    • 我设置了 session.use-only-cookies=0,重新加载了 Apache。同样的问题。 file() 不在 URL 中带有 session_id 的页面。
    • 好的,它是有效的,但不是预期的!
    • 也可以使用 SID 常量:return file_get_contents($url. "?" . SID);
    【解决方案3】:

    session_namesession_id 为您提供当前脚本会话;不是删除服务器。你需要使用能理解http的东西。 Curl 可以,或者您可以使用类似 SimpleBrowser 的东西,它完全模拟了浏览器。

    【讨论】:

      猜你喜欢
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      相关资源
      最近更新 更多