Javascript 正在文件上创建cookie:///url-正在创建该文件但未显示在document.cookie或chrome dev tools中的cookie列表中的证据
我有一些创建cookies的代码。它创建两个不同的用户组,检查用户cookie是哪个组,并基于此执行某些操作 代码是在本地计算机上开发的,因此可以通过以下文件进行访问:///URL 看起来是这样的:Javascript 正在文件上创建cookie:///url-正在创建该文件但未显示在document.cookie或chrome dev tools中的cookie列表中的证据,javascript,file,cookies,Javascript,File,Cookies,我有一些创建cookies的代码。它创建两个不同的用户组,检查用户cookie是哪个组,并基于此执行某些操作 代码是在本地计算机上开发的,因此可以通过以下文件进行访问:///URL 看起来是这样的: function cookieCreation() { var groupId = Math.floor(Math.random() * 2) + 1; var expDate = new Date(new Date().getTime
function cookieCreation() {
var groupId = Math.floor(Math.random() * 2) + 1;
var expDate = new Date(new Date().getTime()+60*60*1000*24).toGMTString()
document.cookie = "userGroup_" + groupId + ";" + "expires=" + expDate +";path=/";
}
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 cookieBasedPush() {
cookieCreation();
var currentCookie = getCookie("userGroup_1");
if (currentCookie == null) {
console.log("User Group 2");
} else {
console.log("User Group 1");
}
}
window.onload = cookieBasedPush;
函数cookieCreation(){
var groupId=Math.floor(Math.random()*2)+1;
var expDate=new Date(new Date().getTime()+60*60*1000*24)
document.cookie=“用户组”+groupId+”;“+”expires=“+expDate+”;path=/”;
}
函数getCookie(cname){
变量名称=cname+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i
cookie看起来像是被创建的,因为我可以看到“用户组1”正在被控制台记录。但是,当我运行document.cookie时,我什么也得不到
我搜索并发现,根据这个答案,表明不能在文件中创建cookies:///URL
这让我感到困惑,也没有任何意义-如果是这样的话,那么为什么我会获得用户组1 cookie创建的一个成功的console.log?为什么document.cookie在控制台中运行时为空?我的逻辑在代码中不正确吗?Cookies严格来说是一种HTTP机制
请参阅此链接,以获取本网站的chrome“bug”报告
但是,您可以使用标志--enable file cookies
运行chrome以允许文件:///cookies
要使用实验/开发人员标志运行chrome,请查看说明
除了Android之外,chrome运行的所有平台上的--enable file cookies
标志似乎都已被删除。
你可以阅读更多关于它的信息
这样看来,似乎无法在
文件://
URL结构下存储cookie,解决这一问题的最佳方法是在开发时在本地运行一个小型服务器。下面是一个很好的脚本列表,可以从命令行运行本地HTTP服务器 好的-请记住,如果在文件上禁用cookie://
,为什么此代码会显示“用户组1”?我的逻辑缺陷是什么?您仍然会得到日志“用户组1”
,因为您正在检查函数getCookie()
(这是一个空字符串)中的返回值是否等于null
,首先,您不需要在函数末尾返回,其次,null
不等于“”
。查看此处了解数据类型|此外,在检查某个内容是否“等于”某个内容时,请确保使用类型安全的相等运算符、==
和==代码>而不是它们的常规对应项=
和=代码>。我很难得到它,所以我提前道歉。这意味着一个cookie正在生成,对吗?因为如果它为null,它将返回用户组2(我意识到这是一个缺陷,但我稍后会尝试解决),我做了一些更改,建议将检查null更改为检查cookieBasedPush()
函数中的”
,删除了retrun并使用类型安全运算符,所以==
但我仍然得到了用户组1。看看我的答案,我已经更新了它,以纠正我之前关于使用上述标志运行chrome的错误。那时应该没有cookies,并且应该始终为空。如果我得到的是用户组1,它不能是null
,对吗?