![](/img/trans.png)
[英]PHP 5.6 - $_COOKIE become empty when more than 2 x 4KB cookie inserted from browser
[英]Cookie is present in browser, but php $_COOKIE is empty
我有一个项目可以在本地服务器上运行,但不能在我的生产服务器上运行,这是因为服务器无法看到Cookie。 我制作了代码的最低版本,该代码在该服务器上重现了该问题:
<?php
if(!isset($_COOKIE['foo'])){
setcookie('foo', 'bar', time() + 7*24*60*60, '/');
echo "Cookie was not found, so we just created it.";
} else {
echo "Cookie was found!";
}
?>
无论我刷新此页面多少次,我总是会收到“未找到”消息。 每当我尝试记录$_COOKIE
变量时,都会得到一个空数组。 然而:
path
不是问题) setcookie
之前没有输出,并且文件使用UTF8编码而没有BOM 我认为这是服务器配置问题,因为代码在本地运行,但是我不知道在哪里查看。 有没有人看过这个,你知道是什么原因造成的吗?
如果您需要更多信息,请告诉我,我将其添加到我的问题中。 谢谢!
如果涉及缓存服务器或CDN,则可能是根据白名单过滤cookie。 这是为了改善缓存,因为每个具有唯一Cookie集合的请求都将被视为与其他请求不同,因此无法缓存(您可能会基于Cookie收到来自服务器的不同回复,因此缓存服务器无法为您提供前一个客户端的缓存响应)。 由于许多服务都设置了可以发送到服务器的cookie(例如,分析程序包),但对响应的内容绝对没有影响,因此默认情况下注意所有cookie通常会完全破坏缓存。
配置负责的缓存服务器以特别注意您的cookie并将其转发到原始服务器。 如果您有很多不同的cookie,请考虑给它们提供通用的前缀和白名单(例如foo-*
)。
我只是处理了同样的问题,我的生产服务器允许我使用setcookie('cookieNameHere', $cookieValueHere, time() + (86400 * 365), "/")
创建浏览器cookie,但是$_COOKIE
变量是总是一个空数组。
问题是出于安全原因,我的生产服务器禁止通过PHP直接访问$_COOKIE
变量内容。
我的解决方案是使用以下功能通过JavaScript访问Cookie值:
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
我继续通过PHP创建/更新cookie。
仅供参考,我正在WP-Engine托管的WordPress网站上工作。 请参阅此页面以获取详细说明,以及在绝对需要通过PHP(ADMIN-AJAX调用等)访问cookie值的情况下的其他选项。
我遇到过类似的问题,事实证明这是HAProxy配置问题。 服务器和用户之间是否有任何负载平衡器?
我认为您的问题是服务器时间。 使用time()函数检查您的时间,并将其与本地时间进行比较。 也许其中之一是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.