Лучший способ однозначно идентифицировать пользователя в этом случае?

У меня будет код, работающий на сайте в iframe, который может быть или не быть междоменным и может дублироваться в нескольких iframe. У меня может быть код, работающий в верхнем окне, а может и нет. Я хочу, чтобы мой JS генерировал уникальный идентификатор, который будет таким же, если он будет сгенерирован моим кодом в любом фрейме на этой странице, в нескольких фреймах, фреймах, вложенных в фреймы, или в верхнем окне, для жизни этой загрузки только главная страница.

Он должен генерировать один и тот же идентификатор при запуске в любом контексте окна этой веб-страницы, загружаемой для этого пользователя в это время. Поэтому, если iframe удален, другой добавленный должен генерировать тот же идентификатор.

Какую информацию лучше использовать для этого? По сути, это идентификатор сеанса, но он должен быть сгенерирован в браузере и быть одинаковым для любого дочернего iframe, генерирующего его. Спасибо всем, кто может помочь!


person tripRev    schedule 30.01.2016    source источник


Ответы (2)


После некоторого чтения кажется, что создание отпечатка пальца браузера будет решением. Эти проекты github полезны:

Я, вероятно, воспользуюсь одним из них или получу идеи для реализации собственного упрощенного решения.

person tripRev    schedule 04.02.2016

Я не уверен на 100%, отвечает ли это на ваш вопрос, но мой способ создания случайной строки частично вдохновлен способом MongoDB для создания уникальных идентификаторов объектов:

var uniqueString = Date.now().getTime() + Math.random();

Если у вас нет сотен тысяч пользователей, запускающих этот код в одну и ту же миллисекунду, вам должна быть гарантирована случайная строка.

ИЗМЕНИТЬ

В вопросе упоминается работающий код в верхнем окне. При этом есть несколько решений, которые могут работать:

  • Используйте PostMessage API для отправки всех фреймов на странице. тот же случайный идентификатор
  • Разверните iframe со случайным идентификатором в качестве строки запроса (например, http://www.example.com/mypage?id=123)

Однако если вы не можете выполнить код в верхнем окне, вам придется делать что-то на стороне сервера. Здесь я не слишком уверен в том, как бы я это сделал, так как я не уверен, что вы используете на бэкэнде, но в Node.js вы можете проверить объект req. Он будет содержать такие вещи, как IP-адрес пользователя, строку его пользовательского агента, дату запроса и т. д. Объединение IP-адреса, строки пользовательского агента и, возможно, ссылающейся страницы (т. уникальный идентификатор для всех фреймов на данной странице для данного пользователя.

person sg.cc    schedule 30.01.2016
comment
Спасибо, но это не подходит. Мне нужно, чтобы он был одинаковым каждый раз, когда мой код запускается на экземпляре веб-страницы, будь то в iframe/нескольких кадрах или нет. Даже если бы я просто использовал временную метку, она была бы разной для каждого iframe, поскольку они загружались бы в разное время. Затем случайное число снова сделало бы каждый из них другим. Я обновлю вопрос, чтобы сделать его более ясным, но спасибо за попытку! - person tripRev; 30.01.2016
comment
поэтому, если я зайду на www.example.com и получу случайную строку 1, каждый раз, когда я буду заходить туда после этого, я всегда буду получать случайную строку 1, в то время как у Боба будет 2, а у Чарли будет 3? - person sg.cc; 30.01.2016
comment
точно! Но если код выполняется в iframe1 и iframe2 на www.example.com, все они должны генерировать один и тот же идентификатор на время загрузки этой веб-страницы для Боба. Чарли получит другой идентификатор на главной странице и во всех этих фреймах, но если кто-то закроет страницу и начнет снова, каждый из них получит новый. Есть смысл? - person tripRev; 30.01.2016
comment
Да, это интересная проблема. Я еще подумаю над этим, может быть, я смогу придумать что-то получше. - person sg.cc; 30.01.2016