2011-02-23 53 views
2

我在创建一个匿名调查。但是,我想阻止用户投票两次。我在想一些散列值request.META像这样的:Django:根据请求为用户创建唯一标识符.META值

from hashlib import md5 

request_id_keys = (
    'HTTP_ACCEPT_CHARSET', 
    'HTTP_ACCEPT', 
    'HTTP_ACCEPT_ENCODING', 
    'HTTP_ACCEPT_LANGUAGE', 
    'HTTP_CONNECTION', 
    'HTTP_USER_AGENT', 
    'REMOTE_ADDR', 
) 

request_id = md5('|'.join([request.META.get(k, '') for k in requst_id_keys])).hexdigest() 

我的问题:

  1. 好主意?馊主意?为什么?
  2. 这些键中的一些是多余的还是只是矫枉过正?为什么?
  3. 其中一些很容易改变?例如,我正在考虑删除HTTP_USER_AGENT,因为我知道这只是一个简单的配置更改。
  4. 知道一个更好的方式来完成这个半独特的标识符,足够灵活地处理共享IP(NAT)的人,但是一个简单的配置更改不会创建一个新的散列?

回答

3

所有这些参数都很容易改变。为什么不为此目的使用cookie?我猜像evercookie

evercookie是一个javascript API可用,在浏览器中产生非常持久的cookie。其目标是即使在他们删除了标准Cookie,Flash cookies(本地共享对象或LSO)以及其他人之后也能识别客户端。

+0

真棒的想法。为永远的+1。 – 2011-02-23 18:38:57

+0

我所做的只是进入Chrome隐身模式,并以新用户的身份出现。我希望比这更强大。更不用说,我觉得有些利用一些漏洞跟踪用户。 – 2011-03-01 21:23:54

+0

如果这是一个匿名调查,您必须接受将会有用户无法跟踪,否则您最终会成为'skeevy'。 – KindOfGuy 2013-12-23 23:07:46