Как определить посетителя на основе характеристик браузера?

Я делаю простое приложение, в котором пользователи могут оценивать элементы.

Я хочу сделать приложение очень простым в использовании и хотел бы избежать входа в систему, даже если это означает менее точные оценки.

Я нашел эту статью о признании пользователя на основе характеристик браузера: http://www.mediapost.com/publications/?fa=Articles.showArticle&art_aid=128563

Как я могу реализовать что-то подобное в JS/ Node.js?

Ответ 1

Вместо того, чтобы делать много трюков, основанных на характеристиках браузера, которые могут быть или не быть доступны, вы можете просто использовать файл cookie. Браузеры могут меняться/обновляться с течением времени. Вы не сможете избежать изменения браузера, вызвав нового пользователя в любом случае. Но cookie будет поддерживаться при обновлении браузера. Просто установите cookie для некоторого (полу) уникального значения (например, времени, включая миллисекунды + IP-адрес), и все будет настроено. В тот момент, когда у вас так много пользователей, что (полу) уникальные значения имеют проблемы, вы все равно будете перестраивать свой сайт (и, вероятно, у вас будет команда людей, работающих на вас).

Ответ 2

Если по какой-то причине вы хотите избежать куки файлов, вы можете использовать PHP для получения IP-адреса клиента:

<?php
echo ' Client IP: ';
if ( isset($_SERVER["REMOTE_ADDR"]) )    {
    echo '' . $_SERVER["REMOTE_ADDR"] . ' ';
} else if ( isset($_SERVER["HTTP_X_FORWARDED_FOR"]) )    {
    echo '' . $_SERVER["HTTP_X_FORWARDED_FOR"] . ' ';
} else if ( isset($_SERVER["HTTP_CLIENT_IP"]) )    {
    echo '' . $_SERVER["HTTP_CLIENT_IP"] . ' ';
}
?> 

Вы можете добавить функцию, запрашивающую имя пользователя, если ip-адрес не находится в файле, и связать новый IP со старыми именами пользователей и т.д. Файлы cookie работают намного лучше:)

Другой вариант, более простой, чем файлы cookie, будет localStorage:

Дайте клиенту UUID:

localStorage.setItem('user',UUID);

Получить UUID клиента:

localStorage.getItem('user');

Это немного лучше, чем использование файлов cookie, например, в Firefox (в соответствии с MDC):

  • Хранилище DOM можно очистить с помощью "Инструменты → Очистить недавнюю историю → Cookies ", когда диапазон времени" Все "(через nsICookieManager:: RemoveAll)
    • Но если не указан другой временной диапазон: (ошибка 527667)
    • Не отображается в Инструменты → Параметры → Конфиденциальность → Удалить отдельные cookie (ошибка 506692)
  • Хранилище DOM не очищается с помощью Tools → Options → Advanced → Сеть → Автономные данные → Очистить сейчас.
  • Не отображается в "Инструменты → Параметры → Дополнительно → Сеть → Offline data ", если сайт не использует автономный кеш. сайт появляется в этом списке, данные хранилища DOM удаляются наряду с автономным кешем при нажатии кнопки "Удалить".

но он работает только с HTML 5.

Ответ 3

Я согласен с evan, гораздо проще сделать это с помощью файлов cookie.

если вы хотите написать что-то подобное, вам нужно будет получать данные с сервера и из браузера (ip, браузер, flash, java, cookies...): весовые данные, создание правил изменений, таких как обновления браузера обновляются, чтобы увеличить или уменьшить вес, чем создать нейронную сеть нейронов, собрать массу учебных данных и научить вашу сеть. (Вы можете использовать другой подход, не используя нейронные сети)

Это хороший проект, но похоже, что он использует танк или линкор, чтобы убить мышь.

Я думаю, что разница между использованием простых файлов cookie и этим набором характеристик браузера будет составлять около 10%, поэтому переходим на файлы cookie.

Ответ 4

Вы можете посмотреть здесь: http://www.w3schools.com/js/js_browser.asp

Но я настоятельно рекомендую использовать файлы cookie для этой цели. Также имейте в виду, что файлы cookie могут быть изменены пользователем. Если вы можете - просто используйте что-то вроде PHP $_SESSION