我正在使用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名称的破折号,非常奇怪的东西。
2条答案
按热度按时间xuo3flqw1#
如果您在
cart_cookie
中传递了正确的值(例如“SO test”),则脚本应该可以工作。在JS中设置cookie的一般方法如下:
假设JS脚本为:
在运行它时,它将设置cookie,然后重定向到另一个页面(我将其命名为testSO5Feb2023c.php),这表明cookie设置正确
对于测试SO5Feb2023c.php:
您可能会看到DEMO
最后但同样重要的是,请注意
the cookie is retrievable ONLY after it is set
,因此请确保显示cookie的页面与您设置cookie的页面不同,否则您可能需要刷新页面laik7k3q2#
由于一些愚蠢的原因,当我从cookie名称和引用它的位置中删除破折号时,一切都正常。由于一些奇怪的原因,
$_COOKIE
不喜欢在这个godaddy服务器上用破折号作为cookie名称,非常奇怪的东西。