繁体   English   中英

我有一个 wordpress 站点,其中设置了一个 cookie,用于确定要在首页上显示的图像/文本。 它总是在 mac 上工作,很少在 windows 上工作

[英]I have a wordpress site where a cookie is set determining what image/text to show on the front page. It works on mac always, on windows rarely

在片段插件中,我添加了以下代码;

    add_action( 'wp_head', function () { ?>
<script>
    
        function createCookie(cookieName,cookieValue,daysToExpire) {
          var date = new Date();
          date.setTime(date.getTime()+(daysToExpire*24*60*60*1000));
          document.cookie = cookieName + "=" + cookieValue + "; expires=" + date.toGMTString() + "; path=/; domain=humanistperspectives.org; secure";
        }

    function accessCookie(cookieName) {
          var name = cookieName + "=";
          var allCookieArray = document.cookie.split(';');
          for(var i=0; i<allCookieArray.length; i++) {
            var temp = allCookieArray[i].trim();
            if (temp.indexOf(name)==0)
            return temp.substring(name.length,temp.length);
          }
            return "";
        }

function getCookie(cookieName) {
  let cookie = {};
  document.cookie.split(';').forEach(function(el) {
    let [key,value] = el.split('=');
    cookie[key.trim()] = value;
  })
  return cookie[cookieName];
}

    function delCookie(cookieName) {
        cookieValue = "";
          var date = new Date();
          date.setTime(date.getTime()-(3600));
          document.cookie = cookieName + "=" + cookieValue + "; expires=" + date.toGMTString() + "; path=/; domain=humanistperspectives.org; secure";
        }
</script>
<?php } );

这会设置一个 cookie 并设置显示在我们网站首页上的文件和标题。

当我在我的 mac 浏览器(safari、firefox、chrome)中检查同一页面时,我看到 cookies 已全部设置,将于今年 9 月到期。

以下是 cookie 的值:

名称:issuecover 值:/wp-content/uploads/2022/03/220.jpg 域:.domain.org 过期时间:2022 年 9 月 5 日 大小:45 HttpOnly:false 安全:true 同站点:无; 最后访问:2022 年 5 月 17 日,星期二

相同的值出现在 Windows 中的 firefox、chrome 和 edge — 但在 Windows 中,尽管具有相同的 cookie 值,该网站似乎无法访问 cookies。所以杂志封面是一张空白图片,标题是空白等 — 但我在检查时看到是的,事实上,cookie 的设置就像在我的 mac 上一样。

只是在 mac 上,每个浏览器都能够访问这些值并显示适当的文本/图像,而在 windows 上,浏览器无法访问相同的 cookies。

有谁知道 Windows 是否对 cookies 更挑剔?

注意:该站点位于 Cloudflare 上,奇怪的是,如果我在 windows 中清除缓存并强制刷新,则浏览器可以访问 cookie 中的信息……但仅限于那时。 如果我几个小时后回来... 尽管看到 cookies 在浏览器中仍然处于活动状态,但 cookies 中的信息将不会在第一次后显示在页面上。

我很感激这里的任何帮助..非常感谢!

编辑:我添加了代码以添加 SameSite=Lax 并在 Mac 上显示,但在 Windows 上,SameSite=None 仍然存在。

          document.cookie = cookieName + "=" + cookieValue + "; expires=" + date.toGMTString() + "; path=/; domain=domain.org; secure; SameSite=Lax;";

更新:

实际上,我注意到另一个插件有一个 javascript 错误,当我删除它并清除缓存时,cookie 的 samesite 松散状态实际上在 Windows 和 cookies 在页面上可读/可访问。 然而,真正的测试是在 1-2 小时后回来查看它是否仍然按照我想要的方式运行。 我会回来详细说明。 谢谢。

坏消息:

因此,回到该站点,cookies AGAIN,尽管存在,但 samesite=lax,不知何故无法访问该页面,并且它们的值无法显示。

httponly 是错误的......它应该出现。 为什么这在 Windows 中不起作用? Mac 和 Windows 都正确存储了 cookies,但只有在 Mac 上它们才会出现在页面上。 帮助!

最后更新

我已经删除了 cookies 并使用全局变量来解决 select 不同的问题和相关内容。

出于某种原因,Cloudflare 似乎正在缓存 cookies。

所以感谢大家的帮助!

我删除了所有与 cookie 相关的代码,最终得到了一个更简单、更快的带有全局变量的代码。

谢谢大家!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM