2008-09-30 3 views
1

У нас есть 5 сбалансированных веб-серверов с различными веб-сайтами. Я пытаюсь добиться единственного входа. То есть одна и та же учетная запись пользователя не может войти на один и тот же сайт более одного раза в любой момент времени.ASP.NET Single Login - распределяет сеанс ответа

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

Я не хочу потерять преимущество сбалансированных серверов, поэтому использование одного сервера Sql в качестве сервера состояния сеанса или одного сервера для обработки входа не является вариантом.

Распространен сеанс (что-то вроде Scaleout Sofware) правильный подход для достижения этого?

Или есть другой механизм для обработки единого входа, о котором я блаженно не подозреваю?

ответ

1

У вас есть два набора проблем здесь:
1) Разрешение только один подключенный пользователя в веб-фермы сценария
2) Обнаружение пользователя выхода из системы

Для решения первой единственным решением является центральным для хранения какой-то состояния пользователя, используя центральный сервер для хранения сеанса ASP.Net или какого-либо другого централизованного пользовательского состояния. Это центральное хранилище может быть SQL Server с использованием собственного управления состоянием сеанса (кстати, Oracle, от Oracle 11, может поддерживать хранилище сеансов), сервис AspState или внешнее решение, такое как ScaleOut (как вы сказали), или его альтернативный memcached с открытым исходным кодом (см. https://sourceforge.net/projects/memcacheddotnet/). Или вы можете создать простую централизованную веб-службу, которая проверяет активные логины на базе базы данных SQL Server, таким образом вы также можете быстро создавать средства отчетности о зарегистрированных пользователях и т. Д.


Реальная проблема, на мой взгляд, заключается во второй части, что вам необходимо поддерживать различные сценарии «неправильного выхода», которые доступны в веб-мире (например, закрыть браузер из-за сбоев или выключения приложений) без выхода из системы), предоставляя вам приложение, способ изящно работать с пользователем, у которого включен старый сеанс (как вы сказали, просто истекает первый сеанс работы).

Имейте в виду, что использование государственного сервера, такого как сервер SQL, не приведет к потере сбалансированных серверов, если это способ работать с окружением веб-фермы и сеансом совместного доступа, только проблема заключается в производительности (если состояние сеанса становится большой) и затраты, связанные с использованием SQL Server, если у вас еще нет соответствующей лицензии.