Facebook Instant Game JS Cookie Chrome 错误
Facebook Instant Game JS Cookie Chrome Error
我们在 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, value, days);
};
console.log(createCookie('username', 'John Doe'));
console.log(createCookie('username', 'John Doe', 1));
所以问题出在域名上。
Facebook 使用:
.facebook.com
但是 Instant Games 上的应用程序有另一个域,例如:
apps-*.apps.fbsbx.com
未设置 cookie,因为:
https://blog.heroku.com/chrome-changes-samesite-cookie
我只是更改 cookie 添加:
{ sameSite: "None", secure: true, expires: 7 }
而且效果很好。
我们在 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.
中安全地创建一个 cookieconst 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, value, days);
};
console.log(createCookie('username', 'John Doe'));
console.log(createCookie('username', 'John Doe', 1));
所以问题出在域名上。 Facebook 使用:
.facebook.com
但是 Instant Games 上的应用程序有另一个域,例如:
apps-*.apps.fbsbx.com
未设置 cookie,因为:
https://blog.heroku.com/chrome-changes-samesite-cookie
我只是更改 cookie 添加:
{ sameSite: "None", secure: true, expires: 7 }
而且效果很好。