Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript设置Cookie时遇到问题_Javascript - Fatal编程技术网

使用Javascript设置Cookie时遇到问题

使用Javascript设置Cookie时遇到问题,javascript,Javascript,我正在为一个网站设置cookies,但我一直很难做到正确。当我在浏览器(Chrome)上检查DevTools时,我总是收到关于SameSite属性未指定的消息。有人能帮忙吗 const dropCookie = true; const cookieDays = 14; const cookieName = "Compliance"; const cookieState = "on"; const banner = document.getElementBy

我正在为一个网站设置cookies,但我一直很难做到正确。当我在浏览器(Chrome)上检查DevTools时,我总是收到关于SameSite属性未指定的消息。有人能帮忙吗

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