为什么首次进入页面后输入了username,刷新页面或者点击页面的button又提醒输入username?

O_o华丽丽
  • 130
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<head>
<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;
    console.log(document.cookie);
}
function getCookie(cname){
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i].trim();
        if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
    }
    return "";
}
function checkCookie(){
    var user=getCookie("username");
    if (user!=""){
        alert("欢迎 " + user + " 再次访问");
    }
    else {
        user = prompt("请输入你的名字:","");
          if (user!="" && user!=null){
            setCookie("username",user,30);
        }
    }
}
</script>
</head>
    
<body onload="checkCookie()">
    <button type="button" onclick="checkCookie()"></button>
</body>
    
</html>

按照我对这段代码的理解应该是设置了cookies之后,在30天内的有效期内都能检测到username,第一次输入后,有效期内就不应该再输入了。但是为什么会在弹出prompt框让我再次输入;

我也在控制台里打断点看了代码的执行情况,发现setCookie的function里的console.log(document.cookie);执行出来的结果为'',按理说进入页面输入了username之后,username的cookie应该存在。。。。。。。。。。。

为什么会这样啊,小白求指教?实在是想不明白

补充图片:
图片描述

回复
阅读 1.8k
3 个回答
✓ 已被采纳

问题在于 本地浏览只有firefox支持cookie...你切个服务器环境,就好了。。。跟代码一点关系都没有

问题所在就是cookie设置不成功
clipboard.png

你设置setCookie时没定义path,所以会依照当前页面的路径填值。

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+";path=/;"+expires;
    console.log(document.cookie);
}

会出这种现象,比如在codepen.io模拟编辑环境下,就会发生这种情况(每次刷新是新的页面展现给你)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏