Единый вход в ASP.NET — ответ на вопрос о распространении сеанса

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

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

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

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

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


person WebDude    schedule 30.09.2008    source источник


Ответы (1)


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

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


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

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

person massimogentilini    schedule 30.09.2008