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