HttpApplicationState с использованием IIS

Передо мной была поставлена ​​задача создать POS-приложение на основе браузера, которое будет размещаться на сервере IIS на одном ПК. Несколько других ПК и планшетов получат доступ к функциям приложения, введя IP-адрес компьютера, на котором оно установлено, в своих браузерах, когда все они подключены к одной сети. Приложение будет запрограммировано в ASP.NET с C# в качестве кода за страницами ASPX.
Мой вопрос заключается в следующем: если я использую HttpApplicationState (var x = Application["testVariable"];) для хранения переменных, будут ли они локальными для каждого устройства, которое подключается к сайту, или они будут доступны для всех устройств и могут быть перезаписаны?

Пример:
IPad подключается и входит в систему как пользователь A. Я установил переменную Application["userName"] в строку "Nathangrad", Затем компьютер подключается и входит в систему как пользователь B. Я установил ту же переменную в "OtherUser", Теперь, если я на iPad и звоню Application["userName"]я бы получил "Nathangrad" или же "OtherUser"?

2 ответа

Решение

HttpApplicationState это глобальная вещь, она доступна для всех пользователей приложения. Из MSDN:

Обеспечивает обмен глобальной информацией между несколькими сеансами и запросами в приложении ASP.NET.

Типичным вариантом использования состояния приложения является хранение чего-либо, что никогда или редко изменяется и не зависит от пользователя вообще.

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

Для хранения пользовательских данных у вас есть два варианта:

  1. Сессия. Опять же из MSDN:

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

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

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

Быстрый поиск в MSDN для класса HttpApplicationState показывает следующее:

"Позволяет обмениваться глобальной информацией между несколькими сеансами и запросами в приложении ASP.NET".

"Один экземпляр класса HttpApplicationState создается при первом запросе клиентом любого ресурса URL из определенного виртуального каталога приложения ASP.NET. Для каждого приложения ASP.NET на веб-сервере создается отдельный отдельный экземпляр. каждый экземпляр затем экспонируется через встроенный объект Application."

Другие вопросы по тегам