Использование класса Session vs. Static для сохранения пользовательских данных - PullRequest
3 голосов
/ 05 января 2012

Я работаю на веб-сайте ASP.NET с бэкэндом C #.Веб-сервер De работает на удаленном сервере, и поскольку мне нужны некоторые данные, расположенные на компьютере клиента (например, идентификатор пользователя), я написал клиентское и серверное приложение.Поэтому, когда пользователь запускает клиентское приложение, оно подключается к веб-серверу, но еще не загружает страницу, веб-сервер запускает мой сервер, который запрашивает у клиента некоторые данные.После того, как клиент отвечает, сервер имеет необходимые данные и веб-страница загружается для клиента.

Чтобы легко получить доступ к некоторым свойствам от пользователя, я хотел использовать переменные сеанса.Но когда клиент отправляет свои данные на сервер, переменная Session еще не доступна.Когда я пытаюсь получить к нему доступ, я получаю исключение NullReferenceException.Я считаю, что это потому, что событие Application_AcquireRequestState еще не запущено (находится в Global.asax.cs).Поскольку мне нужно использовать данные клиента, я сохраняю их в статическом классе, чтобы я мог легко получить к ним доступ в любое время.

Есть ли лучшее решение для этого?Я думал об ожидании события Application_PostAcquireRequestState, потому что я думаю, что переменная Session доступна в это время.Поэтому я мог бы затем загрузить данные из статического класса в переменную сеанса пользователя.Это хорошая идея, или я должен просто придерживаться текущей ситуации (статический класс)?Потому что это работает, но это не лучший способ сделать это.

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 05 января 2012

Состояние сеанса достаточно для данных сеанса пользователя.

Не трогайте статики, они ограничены областью действия для одного AppDomain в процессе. IIS будет перезапускать AppDomains без вашего ведома, связывая ваши статические переменные.

Обновление: для ясности, следующий вопрос / ответ объясняет ситуацию, когда Сессия будет нулевой:

Что делать, если текущий сеанс ASP.NET равен нулю?

Это, очевидно, делает состояние сеанса неподходящим, если ваше приложение попадает в одну из вышеупомянутых ситуаций.

1 голос
/ 05 января 2012

Можете ли вы создать фиктивную страницу, которая будет достаточно далеко, чтобы построить сессию, а затем перенаправить на другую страницу, которая получает все, что угодно с удаленного сервера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...