2011-02-23 23 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