【发布时间】:2019-04-25 01:31:11
【问题描述】:
我有一个项目可以在本地服务器上运行,但不能在我的生产服务器上运行,因为服务器看不到 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 变量时,我都会得到一个空数组。然而:
- cookie 存在于浏览器中,并与请求一起正确发送
- cookie 在同一个文件中设置和读取(
path没有问题) -
setcookie之前没有输出,文件用UTF8编码,没有BOM
我认为这是服务器配置问题,因为代码在本地工作,但我不知道去哪里找。有没有人见过这种情况,你知道是什么原因造成的吗?
如果您需要更多信息,请告诉我,我会将其添加到我的问题中。谢谢!
【问题讨论】:
-
任何 CDN 和/或缓存服务器吞下 cookie...?
-
检查服务器的 php.ini 中是否有
variables_order指令。是否缺少C? php.net/manual/en/ini.core.php#ini.variables-order -
@deceze 有一个 Varnish 缓存设置,但是这个页面没有被缓存。你认为那能吞下饼干吗? @Michael,谢谢你的建议,我查过了,好像没问题:
variables_order = EGPCS -
缓存服务器通常不会默认通过 cookie,除非您明确将它们列入白名单。
-
@deceze 我和一位同事谈过关于 Varnish 的事,他和你说了同样的话:它会根据白名单过滤 cookie。感谢您的帮助,请将其作为答案发布,以便我接受:)