【问题标题】:Accessing $_COOKIE from an included PHP file outside of webroot从 webroot 之外包含的 PHP 文件访问 $_COOKIE
【发布时间】:2012-08-20 12:08:46
【问题描述】:

问题在标题中。

我可以在 webroot 的 php 文件中访问$_COOKIE['blah'],但出于安全目的,我在 webroot 之外包含了无法访问它的内容。

示例

/home/wwwroot/index.php 可以读取 $_COOKIE['blah']

它的完整路径是http://www.mydomain.com/index.php

/home/scrape/process.php 可以 读取 $_COOKIE['blah']

但它在webroot之外,并且scrape文件夹不能在服务器之外访问。

Index.php 可以回显存储在 cookie 中的值,并将带有该值的时间戳写入日志文件。这行得通。

没有发布所有代码并试图保持简单,它只是像这样简单:

<?PHP
include '../scrape/process.php'; // THIS FILE IS OUTSIDE THE WEBROOT
$cook=$_COOKIE['blah'];

echo "Cookie value is : " . $_COOKIE['blah'] ;
error_log('['.date("F j, Y, g:i a e O").']'.$cook."<br /> \n", 3,  $phperrorPath);
?>

<?PHP
echo 'Outer cookie is : ';
echo outer_cookie();
?>

Process.php 函数在 index.php 中被调用,然后它将返回 cookie 的值,并用时间戳和 cookie 值写入它自己的日志文件。这不起作用。日志文件只有时间戳,没有值,它不会向 index.php 返回任何内容。

function outer_cookie() 
{ 
    $cook=$_COOKIE['blah'];
    error_log('['.date("F j, Y, g:i a e O").']'.$cook."<br /> \n", 3,  $phperrorPath);
    return $cook; 
} 

如何让 process.php 读取 cookie 数据?我显然无法将 cookie 路径设置为 webroot 之外的内容,即使我可以,那么 webroot 中的所有内容都无法访问它...

我必须在 cookie 旁边使用 $_SESSION 吗?我不想不得不重复这项工作......

【问题讨论】:

  • cookie 基于设置的域 - 如果您在 example.com 中设置 cookie,它将在 test.example.com 和 `test2.example.com 中可用,您的结构如何?
  • 你是如何准确地测试这个的?文件在文件系统中的什么位置都可以访问 cookie。
  • @MihaiIorga 对,我理解,但是 process.php 文件不在域的 Web 根目录中,所以当它只能是 mydomain.com 的一部分时,如何才能看到它由服务器而不是由客户端访问?
  • @deceze my index.php 可以回显 cookie 的值并将其写入日志。 process.php 设置为将 cookie 的值从 GET 返回到 index.php,并将其写入日志。 Process.php 返回 null 并且不向日志写入任何内容,只是一个时间戳,旁边没有任何内容。
  • 显示您的代码。该文件中的代码是如何执行的,代码到底是什么?

标签: php cookies


【解决方案1】:

请务必让这两个文件都位于您的域或一个域的子域中。

您无法访问在index.php 中设置的 cookie,该文件没有 Web 访问权限且浏览器未对其进行解析。

查看php.net:

Cookie 是一种在远程浏览器中存储数据并因此跟踪或识别回访用户的机制。 Cookie 是 HTTP 标头的一部分,因此必须在将任何输出发送到浏览器之前调用 setcookie()。

【讨论】:

  • 所以即使这个包含的 php 文件尝试在其他任何事情发生之前处理 cookie 信息,它也永远无法读取 cookie 数据?
  • 如果文件包含在您的脚本中并被处理并发送到浏览器,它可以读取数据。因此,如果您在 index.php 中包含 /home/scrape/process.php,它将访问您设置的任何 cookie。
  • 这就是我认为应该发生的事情,但这不是出于某种原因。如果我将 process.php 移动到 webroot(与 index.php 相同的文件夹)并将索引的包含更改为 'process.php';,那么它可以正常工作......但是当它在 webroot 之外时,它就不起作用了。
  • 那么你有一个问题,一个与 cookie 无关的问题,因为你提到的步骤没问题......也许你的error_log(),也许$phperrorPath 这不是一个有效的路径..
  • $phperrorpath 只是在这里输入的,因为我不想在这里输入我的路径。那还能是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2012-02-27
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
相关资源
最近更新 更多