Как medium.com (например) генерирует хэш фрагмента URL?

640
Inactivist

Кто-нибудь идентифицировал сценарии или методы, используемые medium.com (или другим популярным сайтом) для генерации уникального хэш-значения после фрагмента URL?

Придуманный пример: #.lfr25xei4

Они меняются с каждым обновлением страницы (по крайней мере, по моему опыту).

(Я подумал спросить об этом при переполнении стека, но не уверен, что он там есть.)

4

1 ответ на вопрос

3
piotr.d

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

Хеш генерируется на стороне клиента в Javascript и основан на текущей метке времени. Код выглядит так:

hash = generateHash().substr(0, 9)  generateHash = function() { return Math.floor(2147483648 * Math.random()).toString(36) +  Math.abs(Math.floor(2147483648 * Math.random()) ^ (0, getTimestamp)()).toString(36) }  getTimestamp = Date.now || function() { return +new Date } 

(функции были переименованы для ясности)

Вы на 100% уверены, что это основано исключительно на отметке времени? Я [недавно опубликовал ответ об идентификаторах средств массовой информации в Instagram] (http://stackoverflow.com/a/40826963/117259) и отметил, что идентификатор, основанный исключительно на дате, потенциально может вызвать «коллизии» с другими пользователями, которые публикуют сообщения одновременно. , Это означает, что безопасная ставка при создании такой схемы ID состоит в том, чтобы объединить метку времени и имя пользователя. JakeGould 7 лет назад 0
@ Джейк, пожалуйста, взгляните на код. Это то, что они используют. Хеш генерируется двумя `Math.random ()` и операцией XOR с текущей меткой времени. Вероятность «столкновения» смехотворно мала. piotr.d 7 лет назад 1
Какой смысл в случайном хеше? Я нахожу это действительно раздражающим. Я не могу сказать, уже добавил ли я закладку на страницу, если не заменил хэш чем-то непротиворечивым, например, `# nada`. Поскольку это фрагмент URL, сервер его никогда не видит, поэтому его следует использовать в вызовах API XHR. Я предположил, что это было для отслеживания реферера, но это также не имеет никакого смысла ... Inactivist 7 лет назад 1
Это раздражает, и я тоже вырезал якоря. Сервер видит это, потому что JS отправляет его в некоторых Ajax-запросах. Я нашел его, например, в `https: //medium.com / _ / batch`, так что я более чем уверен, что он используется для отслеживания того, кто поделился каким URL, и таким образом они могут разобрать дерево рефералов. Итак, если это отвечает на ваш первоначальный вопрос, пожалуйста, примите ответ. Благодарю. piotr.d 7 лет назад 1

Похожие вопросы