由于服务器看不到 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!";
}
?>
Run Code Online (Sandbox Code Playgroud)
无论我刷新此页面多少次,我总是收到“未找到”消息。每当我尝试记录$_COOKIE变量时,都会得到一个空数组。然而:
path)setcookie,文件用UTF8编码,没有BOM我认为这是一个服务器配置问题,因为代码在本地工作,但我不知道在哪里看。有没有人见过这个,你知道是什么原因造成的吗?
如果您需要更多信息,请告诉我,我会将其添加到我的问题中。谢谢!
如果涉及缓存服务器或 CDN,它可能会根据白名单过滤 cookie。这是为了改进缓存,因为每个具有唯一一组 cookie 的请求都需要被视为与其他请求不同,并且无法被缓存(您可能会根据您的 cookie 从服务器收到不同的回复,因此缓存服务器无法为您提供先前客户端的缓存响应)。由于许多服务正在设置可发送到服务器的 cookie(例如分析包),但对响应的内容绝对没有影响,因此默认情况下注意所有 cookie 通常会完全破坏缓存。
配置负责的缓存服务器专门关注您的cookie并将其转发到源服务器。如果您有很多不同的 cookie,请考虑为它们提供一个共同的前缀并将其列入白名单(例如foo-*)。
小智 6
我刚刚处理了同样的问题,我的生产服务器允许我使用 创建浏览器 cookie setcookie('cookieNameHere', $cookieValueHere, time() + (86400 * 365), "/"),但该$_COOKIE变量始终是一个空数组。
问题是出于$_COOKIE安全原因,我的生产服务器阻止了通过 PHP 直接访问变量内容。
我的解决方案是使用以下函数通过 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 "";
}
Run Code Online (Sandbox Code Playgroud)
我继续通过 PHP 创建/更新 cookie。
仅供参考,我当时正在开发一个托管在 WP-Engine 上的 WordPress 网站。请参阅此页面以获取深入的说明,以及在您绝对需要通过 PHP(ADMIN-AJAX 调用等)访问 cookie 值的情况下的其他选项。
| 归档时间: |
|
| 查看次数: |
5489 次 |
| 最近记录: |