Как будет вести себя Static здесь в asp.net? - PullRequest
0 голосов
/ 01 марта 2011


У меня есть приложение asp.net с языком c #. У меня есть общий класс, который поддерживает константы и статические переменные и поля. У меня также есть страница входа. Если пользователь входит в систему успешно, я устанавливаю IsLoggedInSuccessfull как статическую логическую переменную в общем классе.

Мой вопрос: будет ли это работать только для определенного пользовательского сеанса или для всего приложения?

Отредактировано: На основании некоторых ответов я получил еще один вопрос здесь.

скажем, я использую метод Static как Authenticate(User objUser). намерение состоит в том, чтобы вызвать этот метод, когда пользователь нажал кнопку входа в систему. где на кнопке входа в систему мне разрешено, скажем, подготовить объект User с определенными параметрами, необходимыми для входа в систему, а затем перейти к этому методу. каково будет влияние там? скажем, у меня есть один сервер на данный момент (без фермы серверов или сада). тогда будет единый метод прикладного уровня для аутентификации пользователя, верно? и скажем, 10000 пользователей собираются войти на этот сайт / приложение, тогда как ведет себя метод authenticate ()? будет ли CLR автоматически управлять потоками там?

Ответы [ 4 ]

1 голос
/ 01 марта 2011

Статические переменные находятся на уровне приложения, поэтому они распределяются между сеансами.

Итак, ваша ситуация:

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

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

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

Относительно вашего второго вопроса:
CLR не управляет безопасностью потоков - вам нужно позаботиться об этом самостоятельно.При этом, если статический метод сам по себе не использует глобальные статические переменные и если экземпляр User, который вы передаете статическому методу, уникален, вы должны быть в безопасности.Если экземпляр User не уникален, убедитесь, что код безопасности потока указан в соответствующих местах класса User.

1 голос
/ 01 марта 2011

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

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

1 голос
/ 01 марта 2011

Статический класс будет поддерживать значение.

Но вместо этого лучше использовать Session, поскольку он более интуитивен в веб-приложении и широко используется.

Вот хорошая статья на эту тему:

Управление статическими данными в ASP.NET

0 голосов
/ 01 марта 2011

Статическая переменная будет общей для всего экземпляра приложения, что означает, что она является одной и той же переменной для каждого запроса (пользователя), пока вы запускаете приложение с одним экземпляром.Для пользовательской информации используйте session объект.

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