Django: создание уникального идентификатора для пользователя на основе значений request.META - PullRequest
2 голосов
/ 23 февраля 2011

Я смотрю на создание анонимного опроса. Однако я хочу запретить пользователям голосовать дважды. Я думал о хешировании некоторых request.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), но простое изменение конфигурации не создаст новый хеш?

1 Ответ

3 голосов
/ 23 февраля 2011

Все эти параметры довольно легко изменить. Почему бы просто не использовать куки для этой цели? Я думаю, что-то вроде evercookie

evercookie - это доступный API-интерфейс javascript, который создает чрезвычайно постоянные файлы cookie в браузере. Его цель - идентифицировать клиента даже после того, как он удалил стандартные cookie-файлы, Flash-файлы cookie (локальные общие объекты или LSO) и другие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...