Пишу сейчас регистрацию авторизацию на сайте и столкнулся с такими непонятками: при успешной авторизации я записываю в куки id юзера и хеш авторизации (двойной md5 от uniqid). Всё вроде хорошо работает, но столкнулся с проблемой: при авторизации с другого браузера хеш генерируется заново, следовательно в первом браузере авторизация не валидная. Как правильно сделать? Хранить массив хешей и делать поиск по массиву каждый раз или просто если хеш уже сгенерирован, то ставить его во все браузеры и удалять из БД только при логауте юзера?
Если допустима одна сессия - её идентификатор можно хранить прямо в таблице пользователей. Если допустимо много одновременных сессий - нужно вынести в отдельную таблицу с парами токен-пользователь.
@Ganzal ага, т.е. хранить множество хешей для каждого пользователя, а при смене пароля тереть все, так? Какие ещё сценарии я могу упустить по неопытности?
Только не хэшей, а токенов. И необязательно двойной md5 от уникального идентификатора. Лучше вообще рандомную строку через openssl.
А это принципиально другое название? Всегда думал, что это одно и то же по сути. Сейчас погуглил, это отдельное расширение для php? Его можно на обычном хостинге поставить? И потом без SSL сертификата оно работает?
Ну если будет проблема поставить, сгенерируй случайную строку сам. Например, PHP: md5(uniqid("", true)); Никаких сертификатов для генерации случайной строки не нужно
А второй md5 нафига? Чтоб по радужной таблицы md5 текущего времени в миллисекундах не подобрали? Таких таблиц не существует. Ну да, просто пихаешь это в базу, как @Ganzal сказал, и радуешься
Это разное по сути. Токен это некоторая строка, идентифицирующая что-то. В твоем случае по ней будет найден пользователь в таблице сеансов. Хэш же подразумевает наличие некоторых исходных данных, которые будут обработаны тем же методом хэширования, и полученное значение будет сравниваться с предоставленным для проверки изменений в этих исходных данных. Ты называешь это хэшем потому что хэшировал результат выполнения функции. Но ты не сможешь получить из той функции ту же произвольную строку, повторно её хэшировать и сравнить с хэшем, пришедшим от пользователя. Следовательной твой хэш - просто произвольная строка. Она перестает быть сразу в момент "генерации" ибо на входе у тебя генератор случайных данных. Но она в твоей системе помогает в идентификации пользователя. Следовательно это токен. Для openssl_random_pseudo_bytes() сертификата не нужно. Что такое "обычный хостинг" - я не знаю. Но с учетом огромного давления всяких корпораций на защиту данных - пхп на нормальном хостинге собирается с этим расширением. Но то нормальные хостинги. За "обычные" говорить не могу.