В целом это может быть не такой хорошей идеей как кажется. Наличие нескольких одновременных сессий с разных устройств сейчас - это весьма распространённая практика, особенно если вспомнить о наличии смартфонов. Привязка к IP адресу того же смартфона жителя мегаполиса, перемещающегося в метро и переключающегося между разными WiFi сетями - тоже не вариант. Поэтому прежде чем приступать к реализации - стоит продумать этот вопрос более внимательно.
С технической же точки зрения здесь нет ничего сложного. Поскольку под "входом на сайт", очевидно, подразумевается успешная аутентификация пользователя, а данные этой аутентификации как правило находятся в сессии (пока, для простоты, исключим варианты аутентификации по токену и т.п. вещи, не включающие в себя сессию). В этом случае задача запрета множественных входов очевидным образом сводится к тому чтобы:
- либо, как вы сами предложили, генерировать некий токен и сохранять его в сессии
- либо в качестве такого токена использовать сам идентификатор актуальной сессии пользователя
В любом случае в каком-либо хранилище нужно будет сохранить пару "user id => token" и при дальнейших запросах мы просто проверять имеющийся у нас токен с сохранённым. В случае несовпадения принудительно делать logout с выдачей сообщения через flash messenger.