【发布时间】:2020-07-09 08:05:41
【问题描述】:
所以我在用户接受弹窗的时候通过js设置了一个cookie,是通过下面的函数设置的。
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
setCookie("accepted_popup", 'accepted_value', 1);
在 chrome 开发工具中检查 Cookie 时,它确实已设置。
Name |Value |Domain |Path |Expires |Size |HttpOnly |Secure |SameSite |Priority
accepted_popup |accepted_value |example.com |/ |2020-07-09T15:07:43.000Z |11 | | | |Medium
我意识到要让 cookie 在服务器上生效,它需要一个页面加载。所以我不希望下次页面加载时显示弹出窗口,所以我正在像这样检查服务器上的 Cookie。
<?php
if(isset($_COOKIE['accepted_popup'])){
doSomething(); //not showing popup
}else{
showPopup(); //showing popup
}
?>
这个问题之前没有被问到的新问题是,上面的代码在旧服务器上完美运行,在迁移到 AWS 时它停止工作(如果这可能是一个原因)。
当我在服务器上执行var_dump($_COOKIE); 时,cookie accepted_popup 不会显示在其中。
另外,我正在设置 cookie 并在同一个域中检索它(在生产中),比如“example.com”没有子域或 www。
在我的开发站点 subdomain.example.com 上,上面的代码运行良好,并且表现符合预期。
【问题讨论】:
-
嗨,尝试从 PHP 中设置另一个 cookie,然后检索它,以了解它是否有效
-
@RăducanuIonuţ 我在 PHP 中添加了
setcookie("TestingCookie", "Just a test", time()+86400);和setcookie("TestingCookie2", "Another test", time()+86400, "/", "example.com", 1);,在 $_COOKIE 变量中下次重新加载时它们没有显示 -
来自 php 文档:如果在调用此函数之前存在输出,则 setcookie() 将失败并返回 FALSE。如果 setcookie() 成功运行,它将返回 TRUE。这并不表示用户是否接受了 cookie。可以查看一下返回结果吗?
-
如果你得到 False,意味着不接受 cookie 我遇到了stackoverflow.com/questions/55580256/…。答案表明您应该检查 $_SERVER['HTTP_HOST'] 值。
标签: javascript php cookies