Facebook Instant Game JS Cookie Chrome 错误

问题描述

我们有一个用 JavaScript 和 HTML 制作的游戏。 在 Safari、Firefox 和移动应用程序上一切正常。 问题是在 Chrome 上,在游戏页面上没有设置 Cookie。

我们通常这样做:

function setCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + (value || "") + expires + "; path=/";
}

功能适用​​于除 Chrome 之外的所有浏览器。 我们甚至尝试使用一个名为 js-cookie 的库,但它根本没有设置值。

我们是否遗漏了什么?

解决方法

你如何调用你的函数?以下函数可以安全地在 Chrome 中创建 cookie。

const DAY_IN_MILLIS = 24 * 60 * 60 * 1000;

const createCookie = (name,value = '',days = 0) => {
  const cookie = { [name]: value };
  if (days) {
    const date = new Date();
    date.setTime(date.getTime() + (days * DAY_IN_MILLIS));
    cookie.expires = date.toUTCString();
  }
  return Object.entries({ ...cookie,path: '/' })
    .map(pair => pair.join('=')).join('; ');
};

const setCookie = (name,value,days) => {
  document.cookie = createCookie(name,days);
};

console.log(createCookie('username','John Doe'));
console.log(createCookie('username','John Doe',1));

,

所以问题出在域上。 Facebook 使用:

.facebook.com

但是小游戏上的应用程序有另一个域,例如:

apps-*.apps.fbsbx.com

未设置 cookie,原因如下:

https://blog.heroku.com/chrome-changes-samesite-cookie

我只是更改要添加的 cookie:

{ sameSite: "None",secure: true,expires: 7 }

而且效果很好。