Подтвердить что ты не робот

Статическая переменная на странице asp.net

У меня есть одно сомнение относительно использования статической переменной на страницах 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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

Data Table
userId | UserViews

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