使用 javascript 设置的 cookie,无法使用 PHP 识别(相同的域和路径)

Cookie set with javascript, not recognised with PHP (same domain and path)

本文关键字:识别 路径 PHP cookie 设置 javascript 使用      更新时间:2023-09-26

这些是我的饼干:

我的饼干

我正在使用WAMP服务器从自己的计算机上运行我的网站。我从 http://127.0.0.1/Zulaijen/访问我的主页,这是设置cookie(用户和会话)的javascript功能:

    function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "; expires="+d.toUTCString();
    document.cookie = cname + "=" + cvalue + expires;
}

当我使用javascript阅读它们时,它工作正常。我得到我的会话。然后我用下面的代码转到另一个名为"uploader.php"的PHP页面:

if(!isset($_COOKIE['TestCookie']))
    setcookie("TestCookie", "Hello World!", time()+3600);
print_r($_COOKIE);
echo("Session: " . $_COOKIE['Session'] . "<br/>User: " . $_COOKIE['User'] . "<br/>");

结果是:

数组 ( [测试饼干] => 你好世界! ) 注意:未定义的索引:D:''wamp''www''Zulaijen''uploader中的会话.php 在第 30 行 注意:未定义的索引:用户在 D:''wamp''www''Zulaijen''uploader.php 第 30 行

这意味着我的PHP代码没有读取我用javascript设置的cookie。它只读取我用PHP代码(TestCookie)设置的那个。我不明白为什么。它们位于同一域和相同路径中。

您应该尝试设置 cookie 路径。可能是 PHP 和 JavaScript 的 cookie 路径不匹配,因此 cookie 不会在两者之间共享。

JavaScript cookie 路径:如何在 JavaScript 中保存 cookie 值时设置路径?

PHP 库基路径(请参阅路径部分):http://php.net/manual/en/function.setcookie.php

我终于找到了导致问题的原因(偶然)。这非常令人困惑,但它有一个非常简单的解决方案。

为了从PHP读取cookie,您必须从文件的最开头读取它们。

这样做:

<?php print_r($_COOKIE); ?>

在文件的开头(在任何HTML代码之前)打印我正确设置的每个cookie。即使您从 PHP 设置它们,如果您不从文件的开头开始设置它们,您将无法获取它们。

之所以能够阅读我用PHP设置的那个,仅仅是因为我在阅读它之前就设置了它,或者看起来是这样。