ASP.NET Single Login - раздает сеанс ответ - PullRequest
1 голос
/ 30 сентября 2008

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

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

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

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

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

1 Ответ

1 голос
/ 30 сентября 2008

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

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


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

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

...