我试图了解JavaScript中Cookie的概念。为此,我试图从http://www.w3schools.com/js/tryit.asp?filename=tryjs_cookie_username理解此代码的工作方式:
<script>
function setCookie(cname,cvalue,exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname+"="+cvalue+"; "+expires;
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
function checkCookie() {
var user=getCookie("username");
if (user != "") {
alert("Welcome again " + user);
} else {
user = prompt("Please enter your name:","");
if (user != "" && user != null) {
setCookie("username", user, 30);
}
}
}
</script>
我已经了解了这段代码中的大多数内容,但是仍然有一些疑问/疑问(在getCookie函数中):
怀疑1. for循环的目的
怀疑2。
疑问3. while循环的目的
怀疑4.返回“”的目的;
我问这些问题是因为即使不使用这些条件,脚本也可以正常运行。 (我知道getCookie函数中每个内置函数的工作。我只是不理解上述循环和条件的使用)。
我想说的是:
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
var c = ca[0];
return c.substring(name.length, c.length);
}
即使在
setCookie
函数(exdays*2000
)中将到期日期更改为过去的日期之后,它仍然显示“ Welcome to XYZ”消息。这意味着Cookie不会被删除。但是,当我在其他浏览器中运行相同的代码时,它将被删除。为什么会这样呢? 最佳答案
怀疑1. for循环的目的
所有cookie均保存为以分号分隔的键值(实际上是分号和空格;
)。键和值之间用等号(=
)分隔。通过迭代,您正在检查所有键并仅返回与传递给方法的参数匹配的key值。
怀疑2。
检查迭代中的当前键是否包含传递给方法的cookie名称。
疑问3. while循环的目的
逐个删除所有空格。实际上,可以通过使用trim()
方法轻松地对此进行改进。
//while (c.charAt(0)==' ') c = c.substring(1);
c = c.trim();
怀疑4.返回“”的目的;
如果找不到值,则返回一个空字符串,而不是用户必须检查
null
或undefined
。即使我已将到期日期更改为setCookie中的过去日期
功能(例如* 2000),它仍显示“ Welcome to XYZ”
信息。这意味着Cookie不会被删除。但是当我运行相同的
代码在其他浏览器中被删除。为什么会这样呢?
假设(因为您尚未共享任何小提琴,这是可能的),当您在同一浏览器上第二次打开该页面时,不会执行setCookie方法。