Мы "делаем это неправильно"?
Мы с коллегой работаем над страницей ASP.NET, которая выступает в качестве «портала» для просмотра результатов диагностической программы на сервере UniData. Несмотря на то, что ASP / ASP.NET мы выполняем заурядную работу, это не наш основной язык.
Чтобы получить доступ к этому серверу, мы должны использовать UniObjects, который является API для аутентификации и использования сервера UniData.
Нам нужно, чтобы каждый пользователь, посещающий веб-сайт, должен был пройти аутентификацию с UniData и получить свой собственный сеанс через библиотеку UniObjects, а затем иметь возможность использовать его без повторного входа (если сеанс не использовался в течение «х» минут). ).
Метод, который мы придумали, следующий:
У нас есть синглтон с Hashtable. Он сопоставляет имя пользователя Windows с объектом сеанса.
Если пользователь заходит на нашу страницу и «имя пользователя» не существует в Hashtable, он перенаправляет на страницу входа, где создается объект сеанса и добавляется в Hashtable, если аутентификация прошла успешно. В противном случае он извлекает существующий объект сеанса пользователя из Hashtable и использует его для запроса (если срок его действия не истек, в этом случае мы удаляем его и перенаправляем на страницу входа).
Каждый объект сеанса (который является объектом-оболочкой для вещей из UniObjects) имеет метод «lastUsed». Нам нужно очистить пользовательские сеансы, поскольку у нас есть лицензионные ограничения для пользователей, вошедших на сервер UniData, поэтому каждый раз, когда пользователь перенаправляется на страницу входа, он проверяет, не использовались ли какие-либо сеансы в течение «х» минут, в этом случае он закрывает этот сеанс и удаляет его из Hashtable. Это сделано здесь, чтобы пользователи не испытывали никаких задержек, связанных с проверкой всех сеансов по каждому запросу, только при входе в систему.
Что-то говорит мне, что это решение пахнет, но мне не хватает опыта ASP.NET, чтобы понять, что мы должны делать? Есть ли лучший способ сделать это или все нормально?