Cookie值始终返回false

时间:2018-05-31 06:19:41

标签: javascript jquery json cookies

我正在使用cookiebot来遵守GDPR,到目前为止,cookieBot脚本似乎没有按预期工作。所以我必须添加一些额外的功能来更好地控制页面内容,例如启用/禁用Embebed Youtube视频部分作为示例。

CookieBot以下列格式存储与cookie上的4种类型相关的信息,不确定这是否是正确的JSON格式?

  

{时间戳: 'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V + n2CcOg ==',必要:真,偏好:真,统计:真,销售:假,VER:1}

并使用CookieConsent作为Cookie的名称。

当用户使用addEventListener

点击页面时,我正在尝试读取这些Cookie的值
 document.addEventListener("click", function () {
                console.log("document capture click");
                readCookies();
            }, true);


            function readCookies() {
                console.log("Ready to Read");

                Cookies.get('CookieConsent')

                //Parse the cookie to Object

                cookieval = Cookies.get('CookieConsent');
                console.log(cookieval);

                console.log("Necessary: " + Boolean(cookieval.necessary));
                console.log("Prefrences: " + Boolean(cookieval.preferences));
                console.log("Statistics: " + Boolean(cookieval.statistics));
                console.log("Marketing: " + Boolean(cookieval.marketing));
            }

对我来说问题是所有值都返回false,我使用https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js来读取cookie值,不确定为什么cookieval.marketing总是返回false,即使它在cookie中为true

输出

Ready to Read
{stamp:'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V+n2CcOg==',necessary:true,preferences:true,statistics:true,marketing:false,ver:1}
Necessary: false
Prefrences: false
Statistics: false
Marketing: false

2 个答案:

答案 0 :(得分:-1)

Cookies.get('CookieConsent');将返回字符串

如果要将JSON转换为JavaScript对象,则必须解析它。

NB:

  

{时间戳: 'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V + n2CcOg ==',必要:真,偏好:真,统计:真,销售:假,VER:1}

...无效的JSON。

您还需要更改设置cookie的代码,以便生成有效的JSON。

答案 1 :(得分:-2)

您需要按如下方式解析类似json的字符串

var cookieStr = Cookies.get('CookieConsent');  //{stamp:'HMzWoJn8V4ZkdRN1DduMHLhS3dKiDDr6VoXCjjeuDMO2w6V+n2CcOg==',necessary:true,preferences:true,statistics:true,marketing:false,ver:1}

cookieStr = cookieStr.substr(1, cookieStr.length - 2);  //Get rid of {} marks

var cookieArr = cookieStr.split(',')    //Separate properties

var cookieObj = {}
cookieArr.forEach(function(item) {
   cookieObj[item.split(':')[0]] = item.split(':')[1];    //Assemble new object
})

console.log("Necessary: " + cookieObj.necessary);