如何创建浏览器独立cookie?

时间:2012-01-02 05:37:59

标签: javascript cookies

  • 我正在尝试建立一个投票系统,用户可以在不注册网站的情况下进行投票
  • Cookie取决于浏览器,因此如果使用不同的浏览器,人们可以多次投票(我想阻止他们这样做)(我不想要任何偏见)
  • 我读过evercookie是我可以使用的东西。我看到的问题是调用似乎是异步的。例如

我做以下

 var ec = new evercookie
 ec.get("id", function(value) { 
        alert("Cookie value is " + value);
        if (value != null) {
           alert('cookie already set, returning');
           return;
        }
        ec.set("id", "12345");
        alert('cookie saved');
 });

当我使用此代码时,它首先设置cookie,刷新页面然后返回值,所以我按以下顺序看到

cookie saved
cookie already set, returning

有人可以帮我设置独立于浏览器的Cookie吗?

谢谢

3 个答案:

答案 0 :(得分:8)

只有cookie才能做到这一点。

Cookie存储在每个浏览器(有时甚至是每个模式每个会话),无论如何,可以是用户随心所欲地清除

现在,evercookie试图通过以多种多种方式存储数据来实现这一目标,希望并非所有这些都被同时清除。 然而,这些方法通常仅限于给定的浏览器/配置文件 ,并取决于可以使用哪些其他机制。 ( EC也可以通过禁用JavaScript,使用调试工具调整[cookie或正在运行]值,或使用非浏览器启动请求来绕过。

无论如何,当使用EC方法时(取决于人口统计数据可能取得的成功有限,但远离“hackproof”),只需设置一个[大]“随机值”,如果没有设置任何值,并始终将该值发送到服务器。 (确实没有必要从服务器获取一个nonce,因为服务器无法验证原始请求是不是“重复”,这是一个catch-22。)

快乐的编码。

答案 1 :(得分:2)

你真的不应该使用那个库。它会在您的访问者浏览器中放入大量垃圾,非常不稳定(页面崩溃对我来说)。我认为存在陈述案例而不是在生产环境中使用。

此外,它可以通过不使用浏览器轻松解决,而是使用脚本(wget等)。攻击者可以在短时间内对投票进行投票。

您应该通过数据库中的IP地址保存投票,并且每天只允许投票一次。这是安全性和可用性之间最常见的权衡。

答案 2 :(得分:0)

根据您对尝试完成的内容的描述,Cookie将是一个非常非常糟糕的选择。即使是evercookie也不会与浏览器无关。而且,一旦用户清除了他们的饼干,evercookie就没用了。

存储IP地址服务器端是最接近您正在寻找的东西。但即使这样也充满了挑战。许多公司IT部门都会进行设置,以便来自其网络的所有请求都具有相同的外部IP。在这种情况下,即使有成千上万的员工,每个员工都有自己的计算机,一旦该网络上的一个人提交投票,同一网络上的任何其他用户都将被阻止这样做。同样适用于任何有ISP的家庭。

最重要的是,您所寻找的只是违背互联网的核心架构。