在Apple Safari 14.0.3中,Javascript在未来一周内不会设置cookie过期时间

在Apple Safari 14.0.3中,Javascript在未来一周内不会设置cookie过期时间,javascript,php,cookies,safari,Javascript,Php,Cookies,Safari,这是我第二次问这个问题,但经过大量的尝试和错误实验,我有更多的信息可以提供 我尝试了各种方法,使用javascript“document.cookie=”在Safari中设置cookie 使用以下变量/值 var php_timestamp = Math.floor(Date.now()/1000); // for cookie value var oneYearFromNow = new Date(); oneYearFromNow.setFullYear(oneYearFromNow.ge

这是我第二次问这个问题,但经过大量的尝试和错误实验,我有更多的信息可以提供

我尝试了各种方法,使用javascript“document.cookie=”在Safari中设置cookie

使用以下变量/值

var php_timestamp = Math.floor(Date.now()/1000); // for cookie value

var oneYearFromNow = new Date();
oneYearFromNow.setFullYear(oneYearFromNow.getFullYear() + 1);
var expiryDate = oneYearFromNow.toUTCString(); // for cookie expiry date
我尝试过的各种替代方法包括

从连接的字符串和变量构造赋值表达式

document.cookie = "reminder=" + php_timestamp + ";expires=" +expiryDate + ";path=/;";
将变量插入赋值表达式

document.cookie = `reminder=${php_timestamp};expires=${expiryDate};path=/;`;
document.cookie = "reminder=1615209245;expires=Tue, 10 Mar 2022 00:00:00 UTC;path=/;";
文本字符串值作为赋值表达式

document.cookie = `reminder=${php_timestamp};expires=${expiryDate};path=/;`;
document.cookie = "reminder=1615209245;expires=Tue, 10 Mar 2022 00:00:00 UTC;path=/;";
所有变化产生相同的结果:

Chrome、Opera和Firefox将cookie设置为所需的到期日期

Safari不会使用javascript将cookie过期日期设置为超过1周,但可以使用相同的数据使用PHP成功设置cookie

使用Safari中的javascript,未来超过一周的任何到期日都会设置一个默认到期日值,该值正好是从设置cookie的日期算起的一周

在Safari中使用javascript,到期日期不到一周,在未来的工作中如预期的那样

我尝试使用“max age=”参数而不是“expires=”,但结果是一样的

有人能复制这个吗


我做错了什么?

多亏了Chris G,我用PHP编写了一个变通方法来调整错误设置的cookie过期日期

javascript响应用户操作设置cookie后,运行以下代码,进行必要的调整

<?php
// client-side script (in Safari) cannot create a cookie
// with an expiry later than a week hence
// the cookie has been created, but has the wrong expiry date
// workaround: adjust the cookie expiry date using server-side script

// if the cookie is set
  if(isset($_COOKIE['reminder_requested'])){
  // get the value (the original date on which cookie was set)
    $value = $_COOKIE['reminder_requested'];
  // calculate the date six months from the date set
    $expiry = $value + (DAY_LENGTH * 182); // DAY_LENGTH is 1 day expressed as seconds
  // rewrite the cookie with adjusted expiry date
    setcookie('reminder_requested', $value, $expiry, "/");
}
?>


这是一个已知的Safari问题:(正如您所想:客户端代码无法设置持续时间超过一周的Cookie)谢谢Chris G。对我先前问题的沉默没有帮助。我到处找东西,但在苹果开发者论坛上找不到任何关于它的东西。我的工作可能涉及使用PHP进行调整。我以为我疯了。