Всем добрый день! Появилась необходимость уникально идентифицировать пользователя, притом не испоьзуя регистрацию. Т.е. пришел анонимный юзер - и нужно записать ему в сессию какой-то идентификатор. Есть идея писать рандомную строку, но вдруг эти строки совпадут у разных пользователей(шанс хоть мизерный, но есть)?
Отсюда вопрос, какие уникальные данные можно получить от пользователя, что бы потом их зашифровать и записать в сессию? Приветствуются все здравые соображения, спасибо :)
7 ответов
Если ты берешь хэш от чего-то, то в любом случае возможна коллизия. А чем не вариант выдавать просто последовательные числа?
-
Что бы выдавать последовательные числа, нужно как минимум хранить число юзеров в базе - а это лишний геморой.– metazet19 сен 2011 в 6:40
-
главное только явно их пользователю не передавать, а то появится соблазн их модифицировать и попытаться достучатся до других сессий. С другой стороны, стоит посчитать, сколько будет пользователей всего, может стоит использовать 64 бита или два 64битных числа.– KoVadim19 сен 2011 в 6:40
Можете по приходу юзера, запоминать Unix время, в секундах. И кодировать его либо в base64, либо в md5=)
-
1А если придут одновременно 2 пользователя? Проект предполагается высоконагруженный. Может какие-то данные IP и т.д. можно получить? Как вариант - "склеить" время прихода ещё с чем-то рандомным и от этого взять хэш. Что думаете насчёт этого?– metazet18 сен 2011 в 20:43
-
Почему бы и нет. Это называется "соль"=) Можете просто генерировать число от 1 до 10 и складывать два хэша. Уникальность близится к 100%– systemiv18 сен 2011 в 20:51
-
Я про это и думал, но всё же хочется добиться полной уникальности за счёт каких-то дополнительных технических параметров юзера, что-ли. Подождём ещё идей.– metazet18 сен 2011 в 20:53
В базе данных создать поле которое будет содержать число. Посетитель зашел на сайт, делаем UPDATE на +1 и возвращаем число. Склеиваем полученое число IP и time(), шифруем в md5. А еще лучше шифровать в base64 а потом md5.
-
Я уже тут писал в комментариях, что хранить это число в базе - лишний гемор. Дополнительные запросы не есть хорошо - поэтому лучше обойтись без них.– metazet19 сен 2011 в 13:49
Ради бога , придумайте сами. Там миллионы вариантов на уникальный идентификатор. Знайте одно, md5 не повторяется. Берите unix time
прихода, как говорилось выше, хешируй, но когда впихиваешь в базу, проверяй нету ли там такого ид, если есть просто сделай md5(uid+time) uid того который уже есть и вуаля.
А как насчет тех кто ходит с работы, у них часто будут одинаковые IP в одной оргонизации. Единственное что уникально почти у всех ПК это mac а если к нему добовлять один из выше перечисленных вариантов то всё будет ок.