Мне кажется всё проще надо делать
- пользователь вводит логин/пароль в форме, форма отправляется на сервер (неважно ajax или обычный post запрос)
- если для пользователя включена двухфакторная авторизация, то сервер генерирует случайное число и пишет его в таблицу с пользователем в отдельное поле (дополнительно можно записать срок истечения этого кода в 5 минут). При этом пользователю после отправки формы из предыдущего пункта показывается новая форма с вводом кода (либо оверлеем/модалкой, либо на отдельной странице, в зависимости от способа отправки формы)
- Пользователь вводит код из смс во вторую форму, отправляет на сервер, сервер проверяет совпадение кода (и дополнительно срок истечения этого кода). Если всё ок - авторизовываем пользователя.
Никаких сессий не надо крутить и тем более вешать какие-то скрипты и что-то ожидать и проверять