在PHP中识别file_get_contents()会话

时间:2009-02-25 16:34:04

标签: php session curl file-get-contents

序言:我的应用程序启用了mod_rewrite,我有index.php页面,它根据Request_URI下载vaious页面并将它们打印为页面内容。

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

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

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

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

P.S。对于Windows和Linux,上述情况似乎都是正确的。

3 个答案:

答案 0 :(得分:3)

您没有使用?

将查询字符串与其余网址分开

尝试

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

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

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

注意:我假设您要从与您的应用程序相同的域请求文件,否则使用远程站点的会话ID不会产生太多的 ense。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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