我正在运行脚本来验证用户年龄。用于检查Cookie的功能在用户第一次访问页面时起作用,如果用户没有请求的Cookie,则会重定向到使用年龄验证的首页。
一旦发生这种情况,该cookie实际上是在重定向上创建的,此时用户可以转到站点的任何子页面。谁能指出为什么会这样?
//Setting The Value Of The Cookie
var this_cookies_value = "_addMeToTheBrowser_";
//Checks page on load to see if this_cookies_value already exists
function checkForOurCookiesValue() {
var allTheCookies = document.cookie;
var _this_Host_Name_ = '"' + window.location.hostname + '"';
var _this_Path_Name = window.location.pathname;
console.log(allTheCookies);
if(allTheCookies.includes(this_cookies_value) || _this_Path_Name == "/") {
console.log("WORKING");
} else {
window.location.replace(_this_Host_Name_);
};
}
checkForOurCookiesValue();
//If cookie does not exist, this script will run once users age is verified correctly
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
return true;
}
//Creating the cookie
jQuery(".the_btn").on("click", createCookie("_my_domain_", this_cookies_value, 1));`enter code here`
答案 0 :(得分:1)
您需要在最后一行中将函数设为匿名(无名)函数。
jQuery(".the_btn")
.on(
"click",
createCookie("_my_domain_", this_cookies_value, 1)
);
jQuery(".the_btn")
.on(
"click",
function() {
createCookie("_my_domain_", this_cookies_value, 1)
}
);
浏览器读取您的代码时,会将createCookie()
视为函数调用,需要立即运行。如果将其放在匿名函数中,则将不会调用该函数,而是会创建另一个函数,以便稍后由click
事件调用。
考虑到您使用的是jQuery,我假设您需要完全的浏览器支持,并且IE尚不支持"fat arrow"函数;但是,如果不需要IE支持,则可以使用以下代码:
jQuery(".the_btn")
.on(
"click",
() => createCookie("_my_domain_", this_cookies_value, 1)
);