【问题标题】:Setting Cookie in javascript and reading it in PHP在 javascript 中设置 Cookie 并在 PHP 中读取它
【发布时间】: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


【解决方案1】:

所以问题不是在 PHP 中设置 cookie,而是在 AWS CloudFront 中。 如果有人遇到同样的问题并且有 AWS 托管,请检查

CloudFront 分配 -> 行为 -> 默认 (*) 或者更改“转发 Cookie”选项或设置将 cookie 名称添加到“白名单 Cookie”,如图所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 2012-09-05
    相关资源
    最近更新 更多