Как лучше всего ограничивать сеансы пользователей ASP.NET одним активным сеансом? - PullRequest
3 голосов
/ 07 декабря 2011

У меня есть требование, когда вошедший в систему пользователь может одновременно иметь только 1 активный сеанс в приложении ASP.NET. В настоящее время один пользователь может войти в систему с нескольких машин одновременно и получить несколько сеансов. Я использую стандартное членство ASP.NET с AppFabric для управления состоянием сеанса. Я пропускаю какой-то базовый переключатель, доступный в членстве ASP.NET для обеспечения этого? В противном случае планировалось добавить в базу данных членства таблицу, в которой были бы столбцы aspnet_Users.UserId и sessionId и просто убедиться, что текущий сеансовый Id (последний в) является единственным разрешенным сеансом. Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 13 декабря 2011

Вы можете сделать это так же просто, как сохранить время последнего входа в свою пользовательскую таблицу. Сохраняйте ту же информацию в состоянии сеанса ваших пользователей при входе в систему.

Проверьте, совпадает ли время с каждым запросом страницы. Если при сравнении сервер имеет более новое время в пользовательской таблице, вы знаете, что вы больше не участвуете в последнем сеансе для этого пользователя и можете либо прекратить текущий сеанс, перенаправив его на выход из системы, либо завершить сеанс более нового уровня, войдя в журнал в текущем сеансе. сессия.

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

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

0 голосов
/ 18 января 2012

Мы закончили корреляцию последнего идентификатора сеанса с профилем пользователя в базе данных после успешного входа в систему с использованием пользовательской таблицы. Это коррелированное значение идентификатора сеанса проверяется с использованием HttpModule для каждого запроса. Если текущий идентификатор сеанса пользователя не совпадает с сохраненным идентификатором, он перенаправляется на страницу входа.

0 голосов
/ 13 декабря 2011

Рекомендуется не ограничивать пользовательские сеансы одним активным сеансом.

Пользователь воспринимает это как "надоедливый сайт, который снова пнул меня".

Свяжите состояние пользователя с пользователем, а не с сеансом.

...