我试图在用户访问网站时获得一次性警报,然后放置一个cookie,以便每次返回该网站时都不会使用它。 cookie被保存并且警报正在执行,但它正在执行,我正在撕掉我的头发。一次性警报继续执行
我已经尝试了一些在网上找到的东西(StackExchange,我是如何爱你)但似乎没有工作。这是目前的状态:
<script>
function setCookie(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=/";
}
</script>
<body>
<script type="text/javascript">
if(!setCookie('testcookie')) {
alert("hello world");
setCookie('testcookie','1',3);
}
</script>
</body>
看着cookie记录,它似乎每次都设置。如果我在脚本中更改过期日期,则每次都会在dev控制台中进行更改。不确定这是否表示问题。
=====端到端解决方案======
我缺少的getCookie通话。我也意识到,当试图将它添加到头文件脚本时,执行需要是它自己的函数* facepalm *。我还将所有脚本添加到标题中,而是在body标签中调用该函数。
<head>
<script>
function setCookie(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=/";
}
var getCookie = function (c_name) {
var i, x, y, ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i++) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
x = x.replace(/^\s+|\s+$/g, "");
if (x == c_name) {
return unescape(y);
}
}
};
function checkCookie() {
if(!getCookie('testcookie2')) {
alert("hello world");
setCookie('testcookie2','1',3);
}
}
</script>
</head>
<body onload="checkCookie()">
</body>
TA-DA!
你总是设置Cookie,但没有任何查询现有的Cookie使用。 – 2013-03-15 00:19:10
ftr w3schools有很多不良信息,包括貌似体面的坏信息,不认为它们是可靠的来源。 – djechlin 2013-03-15 18:53:07
是的,我发现这是一个很好的开始,但他们经常忽略那些在学习时会产生巨大差异的小细节,或者没有足够的示例变体来帮助解决问题。虽然这个论坛已被证明是非常宝贵的! – 2013-03-15 20:15:13