PHP无法获取在javascript中设置的cookie

apeeds0o  于 2023-02-07  发布在  Java
关注(0)|答案(2)|浏览(142)

我正在使用PHP 8.0,这是一个WordPress网站版本6.1.1
我有一个插件,是这样设置cookie:

window.tourmaster_set_cookie = function( cname, cvalue, expires ){
        if( typeof(expires) != 'undefined' ){
            if( expires == 0 ){
                expires = 86400;
            }

            var now = new Date();
            var new_time  = now.getTime() + (parseInt(expires) * 1000);
            now.setTime(new_time);

            expires = now.toGMTString();
        }

        document.cookie = cname + "=" + encodeURIComponent(cvalue) + "; expires=" + expires + "; path=/";
    }

这是这样称呼的:

tourmaster_set_cookie('tourmaster-room-cart', JSON.stringify(cart_cookie), 31536000);

我可以在控制台日志中看到正在设置此cookie。
然而,当我尝试在PHP中获取cookie时:

$_COOKIE['tourmaster-room-cart']

我得到这个错误:
警告:未定义的数组键"tourmaster-room-cart"
当我在$_COOKIE上执行print_r时,cookie "tourmaster-room-cart"不存在。
这里出了什么问题,我该如何解决?

    • 更新**

我创建了这个简单的cookie:

document.cookie = "username=John Doe; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";

它出现在我的php $_COOKIE
但是,这在$_COOKIE中未显示

window.tourmaster_set_cookie = function( cname, cvalue, expires ){
        expires = "Thu, 1 Jan 2026 12:00:00 UTC";
        if( typeof(expires) != 'undefined' ){
            if( expires == 0 ){
                expires = 86400;
            }

            var now = new Date();
            var new_time  = now.getTime() + (parseInt(expires) * 1000);
            now.setTime(new_time);

            expires = now.toGMTString();
        }

        document.cookie = cname + "=test; expires=Thu, 1 Jan 2026 12:00:00 UTC; path=/";

    }
    • 另一项更新**

我又添加了一些cookie,看看它们是否会显示$_ COOKIES,除了最后一个测试使用encodeURIComponent(cvalue)作为值之外,它们都显示了$_ COOKIES。它一定是我的值中的某个东西吗?下面是更新的代码,下面是值。

window.tourmaster_set_cookie = function( cname, cvalue, expires ){
        if( typeof(expires) != 'undefined' ){
            if( expires == 0 ){
                expires = 86400;
            }

            var now = new Date();
            var new_time  = now.getTime() + (parseInt(expires) * 1000);
            now.setTime(new_time);

            expires = now.toGMTString();
        }
        document.cookie = "newusernameagain=John Doe; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";
        document.cookie = "newusername-again=John Doe; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";
        document.cookie = "new-username-again=" + encodeURIComponent(cvalue) + "; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";
        document.cookie = cname + "=" + encodeURIComponent(cvalue) + "; expires=" + expires + "; path=/";

    }

而价值
%5B%7B%22开始日期%22%3A%222023 - 02 - 05%22%2C%22结束日期%22%3A%222023 - 02 - 06%22%2C%22手术室数量%22%3A%221%22%2C%22成人%22%3A%5B%222%22%5D%2C%22儿童%22%3A%5B%220%22%5D%2C%22手术室标识%22%3A%2215701%22%2C%22邮件类型%22%3A%22会议室%22%7D%5D
我不知道出了什么问题。

    • 最终更新**

由于一些愚蠢的原因,当我从cookie名称和引用它的位置中删除破折号时,一切都正常。由于一些奇怪的原因,$_ COOKIE不喜欢这个godaddy服务器上cookie名称的破折号,非常奇怪的东西。

xuo3flqw

xuo3flqw1#

如果您在cart_cookie中传递了正确的值(例如“SO test”),则脚本应该可以工作。
在JS中设置cookie的一般方法如下:

document.cookie = "username=John Doe; expires=Thu, 1 Jan 2016 12:00:00 UTC";

假设JS脚本为:

<script>
window.tourmaster_set_cookie = function( cname, cvalue, expires ){
        document.cookie = cname + "=" + encodeURIComponent(cvalue) + "; expires=" + expires + "; path=/";
    }

tourmaster_set_cookie('tourmaster-room-cart', JSON.stringify('SO test'), "Thu, 1 Jan 2026 12:00:00 UTC");

alert("Done ! Now redirecting to show the cookie string");

window.location.href="testSO5Feb2023c.php"; 

</script>

在运行它时,它将设置cookie,然后重定向到另一个页面(我将其命名为testSO5Feb2023c.php),这表明cookie设置正确
对于测试SO5Feb2023c.php:

<?php

echo "Cookie is now : <br>";
echo $_COOKIE['tourmaster-room-cart']; 

?>

您可能会看到DEMO
最后但同样重要的是,请注意the cookie is retrievable ONLY after it is set,因此请确保显示cookie的页面与您设置cookie的页面不同,否则您可能需要刷新页面

laik7k3q

laik7k3q2#

由于一些愚蠢的原因,当我从cookie名称和引用它的位置中删除破折号时,一切都正常。由于一些奇怪的原因,$_COOKIE不喜欢在这个godaddy服务器上用破折号作为cookie名称,非常奇怪的东西。

相关问题