Chrome 通过文件访问页面时Cookie不工作://

lb3vh1jj  于 2023-02-14  发布在  Go
关注(0)|答案(2)|浏览(223)

我的代码可以在firefox运行,当我访问w3schools使用chrome在他们的编辑器中测试我的代码时,它也运行得很好,但是当我从记事本++启动chrome中的代码时,它不工作。看起来body onload不工作,因为我没有收到警报。我的chrome是最新的。帮助将不胜感激。

<!DOCTYPE html>
<html>
<head>
<script>
function setCookie(cname,cvalue,exdays){
var d=new Date();
d.setTime(d.getTime()+(exdays*24*60*60*1000));
var expires="expires="+d.toUTCString();
document.cookie=cname +"="+cvalue+"; "+expires;
}
function f(){
var user=prompt("What is your name?","");
if(user!="" && user!=null){
setCookie("username",user,30);}
}
function getC(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 checkcooki(){
var user=getC("username");
    if(user!=""){
    alert("Welcome back "+user);
    }
}
</script>
</head>
<body onLoad="checkcooki()">

<input type="button" onclick="f()" value="klick">
</body>
</html>
pdtvr36n

pdtvr36n1#

事实上:使用file://协议并不能保证cookie的正常工作。因为cookie需要3件事:

  • 包含实际数据的名称-值对
  • 过期日期,超过该日期后将不再有效
  • 应将其发送到的服务器的域和路径
  • 域告诉浏览器应该将Cookie发送到哪个域。如果不指定它,它将成为设置Cookie的页面的域。*

file://协议中,您没有域。
现在一些浏览器可能已经找到了解决办法,比如FireFox和IE。您可以在这些浏览器上测试您的代码,但它们不会像在Web服务器上那样使用Cookie。
正确的x浏览器测试需要http://协议,我建议您启动一个jsfiddle或设置一个web服务器(IIS,apache)。
正确阅读Cookie:quircksmode
如果你仍然坚持通过file://协议让它在chrome上工作,如果你得到了正确的路径,你可能会有一个很小的机会。

  • path:正确转义的path =〉encodeURIComponent(document.domain)"c:\/my%20folder\/index.html"(同样,这里的信息非常不可信)
  • 域名:"/"(不知道你还可以在这里尝试什么)
m3eecexj

m3eecexj2#

用户变量必须为空字符串。
在checkcooki()函数的最顶部放置一个警告,以验证body onload是否工作。

相关问题