Как хранить данные до первого их использования, а потом их удалить?
Вопрос может быть и тупой, но по крайней мере мне стало интересным найти на него ответ...
Как то раз у меня была задача разработать авторизацию на php с помощью смс. То есть скрипт должен генерировать случайное четырех значное число и отправлять его по смс на номер пользователя. Казалось бы всё элементарно, но вот если пользователь обновит страничку после того, как смс-ка уже отправлена, но код ещё не введен, но скрипт потеряет значение этого кода, так как страничка была перезапущена.
Теперь встал вопрос, где и как лучше хранить этот код. Первое что приходит в голову это куки или сессия. Но это не самый безопасный способ. Также можно создать в БД отдельную табличку, куда помещать id пользователя и код, но это всё банальные способы. Может быть кто-нибудь знает как это реализовать более грамотно? Или же если другого варианта нет, то какой из трёх выше перечисленных вариантов лучше использовать?
PS: также слышал, что это можно реализовать с помощью синглтона, но так и не разобрался как это сделать
Во первых код и номер телефона должны быть привязаны друг другу, а во вторых - обновление страницы не должна влиять на статус аутентификации. Поэтому нужно сделать весь процесс по человечески - в базе данных. Желание придумывать свой велосипед заканчивается плохо
вот структура таблицы id - phone - code - status
значение id = unix time, для указание точки отсчета времени
а вот содержание 1594313710 - +79ххххххх - 0784 - подтвержден
это значит что подтверждение на 1 номер можно производить только один раз, и это условие нельзя обойти никакими пользовательскими методами.
Я делал одноразовые токены на Redis.
Создаётся ключ, командой SET или SETEX (в вашем случае можно склеить номер телефона и код), значение любое, например "1".
Команда DELETE <ключ> вернёт 0, если такого ключа не было, и 1 если он был, и сразу удалит его.
Язык тут особой роли не играет, но синглтон на РНР, не поможет в классическом случае, либо может привести к утечке памяти, в случае демонизации PHP.