Статическая переменная на странице asp.net - PullRequest
17 голосов
/ 07 марта 2011

У меня есть одно сомнение относительно использования статической переменной на страницах Asp.net.

У меня на одной странице написано UserDetails.aspx. На этой странице у меня есть одна статическая переменная для хранения некоторых данных, специфичных для пользователя. Итак, будет ли эта переменная использоваться несколькими пользователями или для каждого пользователя будет создана отдельная переменная?

  public partial class UserDetails : System.Web.UI.Page
    {
       static int numberOfReviews=0;
       protected void Page_Load(object sender, EventArgs e)
         {
            numberOfReviews= GetReviews();
         }
    }

Здесь numberOfReviews будет определенным для каждого пользователя или будет доступно?

numberOfReviews

Ответы [ 5 ]

24 голосов
/ 07 марта 2011

Область приложения: Переменные, имеющие область приложения, доступны по всему приложению, т. Е. Всем пользователям приложений на всех страницах.

Область сеанса: Когда многие пользователи подключаются к вашему сайту, у каждого из них будет отдельный сеанс (связанный с идентификатором пользователя, который распознается приложением). Когда переменная имеет область действия сеанса, у нее будет новый экземпляр для каждого сеанса, даже еслипользователи получают доступ к той же странице.Экземпляр переменной сеанса доступен на всех страницах этого сеанса.

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

Статические переменные имеют Application scope.Все пользователи приложения будут использовать один и тот же экземпляр переменной в вашем случае.

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

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

18 голосов
/ 07 марта 2011

статическая переменная область действия - это область применения. numberOfReviews будет доступно всем пользователям. вам нужно использовать Session для хранения на пользователя, чтобы он был доступен на всех страницах. С другой стороны, если вам просто нужно это на определенной странице, вы можете сохранить его в ViewState и получить в post back .

2 голосов
/ 07 марта 2011

Это будет общедоступное приложение, как и Application ["some_id"].

Используйте для этого обычную переменную int.

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

Как уже упоминал Adeel: статические (или совместно используемые в VB.Net) переменные распространяются на все приложения. Это означает, что они одинаковы для каждого пользователя и существуют до тех пор, пока веб-сервер не будет остановлен или последний сеанс не будет отменен.

Вы можете использовать Session для хранения переменных, принадлежащих текущему пользователю.

Если вам нужен доступ к numberOfReviews другого пользователя (например, в качестве администратора или для статистики), вы можете использовать базу данных, asp.net-кеш или простой статический словарь с идентификатором пользователя в качестве ключа.

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

обычно для этого используется база данных

Data Table
userId | UserViews

Также вы можете использовать статическую переменную, как вы говорите, в этом случае вам нужно хранить данные в Application State, проблема в том, что у вас есть целые данныебудет сброшен при каждом перезапуске.

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