Как запретить одновременный вход в один аккаунт на сайте?

Всем привет, собственно весь вопрос в заголовке. В теории если совсем по простому достаточно добавить ip в временный ключ который генерится и пишется в сессию. Но на практике этого я не делал и не совсем знаю как это сделать в symfony. Может тут услышу еще варианты как можно это сделать.
  • Вопрос задан
  • 155 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Flying
В целом это может быть не такой хорошей идеей как кажется. Наличие нескольких одновременных сессий с разных устройств сейчас - это весьма распространённая практика, особенно если вспомнить о наличии смартфонов. Привязка к IP адресу того же смартфона жителя мегаполиса, перемещающегося в метро и переключающегося между разными WiFi сетями - тоже не вариант. Поэтому прежде чем приступать к реализации - стоит продумать этот вопрос более внимательно.

С технической же точки зрения здесь нет ничего сложного. Поскольку под "входом на сайт", очевидно, подразумевается успешная аутентификация пользователя, а данные этой аутентификации как правило находятся в сессии (пока, для простоты, исключим варианты аутентификации по токену и т.п. вещи, не включающие в себя сессию). В этом случае задача запрета множественных входов очевидным образом сводится к тому чтобы:
  1. либо, как вы сами предложили, генерировать некий токен и сохранять его в сессии
  2. либо в качестве такого токена использовать сам идентификатор актуальной сессии пользователя

В любом случае в каком-либо хранилище нужно будет сохранить пару "user id => token" и при дальнейших запросах мы просто проверять имеющийся у нас токен с сохранённым. В случае несовпадения принудительно делать logout с выдачей сообщения через flash messenger.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы