Да где угодно. Я в конце добавил, что концептуальное различие в том, что мы не зацикливаемся ни на каких пользовательских данных, а токен абсолютно рандомный.
Обычно использую что-то похожее, только вместо «DELETE FROM one_time_auth » делаю UPDATE — сохраняю нужную информацию о человеке (дата, IP и т.д.) и ставлю переключатель типа active enum(y,n) в 'n', чтобы сессия действительно была одноразовой.
И в вашем случае в DELETE просится первичный ключ (банально ID с autoincrement), запрос выполнится быстрее.
token можно сделать обычным ключом (чисто теоретически даже с md5 возможен повтор), добавить первичный ключ типа int (с autoincrement) и для delete использовать его. Что-то мне подсказывает, что на больших таблицах поиск по короткому int будет заметно быстрее поиска по строке token
Пускай будет повтор — я ловлю эксепшн и пытаюсь добавить новый случайный токен: строки 29-36.
По поводу поиска — на примерно нескольких десятках миллионов разница настолько несущественная, что я бы не стал всё таки вводить суррогатные данные, когда у нас есть такие удобные естественные.
Чисто практически даже у четвертинки от MD5 повторы — единицы на миллионы.
Так что длину токена можно уменьшить сильно, если не требуется огромного числа одновременных ссылок с авторизацией.
А вообще с UPDATE клёвая идея. Но цель этого поста выражена в PS и PPS. Это не готовое решение, это просто информация к размышлению и утверждение о том, что «рандомный токен» — это хорошо :-)
Разумеется. Я просто поделился своей идеей-дополнением.
И да, в реальной жизни не всегда нужен 32-символный ключ. Даже 8-символьный ключ подобрать брутфосом практически невозможно, зато ссылка будет выглядеть короче и симпатичнее.
Если учесть, что такая ссылка не для красоты, а для дела — то совершенно не страшно. Вон в платёжных системах вообще урлы длиной сотни знаков, и ничего :)
Входите! Аутентификация без логина и пароля, v2