Javascript 正在文件上创建cookie:///url-正在创建该文件但未显示在document.cookie或chrome dev tools中的cookie列表中的证据

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

我有一些创建cookies的代码。它创建两个不同的用户组,检查用户cookie是哪个组,并基于此执行某些操作

代码是在本地计算机上开发的,因此可以通过以下文件进行访问:///URL

看起来是这样的:

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
,对吗?