使用Javascript设置Cookie时遇到问题
我正在为一个网站设置cookies,但我一直很难做到正确。当我在浏览器(Chrome)上检查DevTools时,我总是收到关于SameSite属性未指定的消息。有人能帮忙吗使用Javascript设置Cookie时遇到问题,javascript,Javascript,我正在为一个网站设置cookies,但我一直很难做到正确。当我在浏览器(Chrome)上检查DevTools时,我总是收到关于SameSite属性未指定的消息。有人能帮忙吗 const dropCookie = true; const cookieDays = 14; const cookieName = "Compliance"; const cookieState = "on"; const banner = document.getElementBy
const dropCookie = true;
const cookieDays = 14;
const cookieName = "Compliance";
const cookieState = "on";
const banner = document.getElementById("cookie-banner");
const displayBanner = () => {
const main = document.getElementsByTagName("main")[0];
banner.style.display = "flex";
main.className += " cookie-banner";
createCookie(window.cookieName, window.cookieState, window.cookieDays);
}
const createCookie = (name, value, days) => {
let cookie = name + "=" + encodeURIComponent(value);
if (typeof days === "number") {
const date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
const expires = "expires=" + date.toUTCString();
}
if (window.dropCookie) {
cookie = `${name}=${value}; ${expires}; path=/; secure; samesite=none`
document.cookie = cookie;
}
}
function checkCookie(name) {
const nameEq = `${name}=`;
const cookieArr = document.cookie.split(";");
for (let i = 0; i < cookieArr.length; i++) {
let c = cookieArr[i];
while (c.charAt(0) == " ") c = c.substring(1, c.length);
if (c.indexOf(nameEq) == 0) return c.substring(nameEq.length, c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name, "", -1);
}
window.onload = () => {
if (checkCookie(window.cookieName) != window.cookieState) {
displayBanner();
}
}
const dropCookie=true;
const-cookieDays=14;
const cookieName=“合规性”;
const cookieState=“on”;
const banner=document.getElementById(“cookie banner”);
constdisplaybanner=()=>{
const main=document.getElementsByTagName(“main”)[0];
banner.style.display=“flex”;
main.className+=“cookie横幅”;
createCookie(window.cookieName、window.cookieState、window.cookieDays);
}
const createCookie=(名称、值、天数)=>{
让cookie=name+“=”+encodeURIComponent(值);
如果(天数类型==“数量”){
const date=新日期();
date.setTime(date.getTime()+(天*24*60*60*1000));
const expires=“expires=“+date.toutString();
}
if(window.dropCookie){
cookie=`${name}=${value};${expires};path=/;secure;samesite=none`
document.cookie=cookie;
}
}
函数checkCookie(名称){
常量nameEq=`${name}=`;
const cookieArr=document.cookie.split(“;”);
for(设i=0;i{
if(checkCookie(window.cookieName)!=window.cookieState){
displayBanner();
}
}
我发现代码中抛出了几个引用错误。我必须更正引用变量作为window
属性的实例,并在createCookie
中修复Unix到UTC的时间转换
const dropCookie = true;
const cookieDays = 14;
const cookieName = "compliance";
const cookieState = "on";
const banner = document.getElementById("cookie-banner");
const displayBanner = () => {
const main = document.getElementsByTagName("main")[0];
banner.style.display = "flex";
main.className += " cookie-banner";
createCookie(cookieName, cookieState, cookieDays);
}
const closeBanner = () => {
banner.style.display = "none";
}
const createCookie = (name, value, days) => {
let cookie = name + "=" + encodeURIComponent(value);
if (typeof days === "number") {
let date = new Date();
let unixDate = date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
date = new Date(unixDate);
const expires = "expires=" + date.toUTCString();
if (dropCookie) {
document.cookie = `${name}=${value}; ${expires}; path=/; secure; samesite=lax`
}
}
}
最后,我修复了window.onload
语句,将函数保存到变量windowInit
,然后在window.onload
中调用它
const windowInit = () => {
if (checkCookie(cookieName) != cookieState) {
displayBanner();
}
}
window.onload = windowInit();
仅当您希望cookie过期时才使用cookie。大多数情况下,您只想使用
localStorage
。