Состояние на главной странице ASP.net - PullRequest
0 голосов
/ 01 декабря 2009

У нас есть ошибка, которую мы пытаемся исправить. Похоже, один пользователь может видеть данные других пользователей, если они одновременно попадают на ту же страницу aspx.

Мне было интересно: если мы сохраним данные в свойстве на главной странице, все страницы, работающие одновременно, увидят эти данные.

Иметь главную страницу:

public class MyMasterBase : System.Web.UI.MasterPage
{
    private int myInt;
}

Создать ссылку на главную страницу со страницы aspx:

MyMasterBase master = Page.Master as MyMasterBase;

Затем два пользователя одновременно вызывают страницу aspx:

  • Первый пользователь устанавливает myInt на 1
  • Второй пользователь устанавливает myInt на 2
  • Если первый пользователь прочитает значение myInt, что это будет?

Я ожидаю, что это будет 1, но если бы это было 2, это объяснило бы нашу ошибку:)

Спасибо

Шираз

Ответы [ 2 ]

1 голос
/ 01 декабря 2009

Это зависит от того, что вы делаете с myInt. Если вы сохраняете его значение в сеансе, проверьте идентичность ваших пользователей (Page.User.Identity.Name), если они равны, вы прочитаете последнее установленное значение. Если вы сохраните его в ViewState, каждый пользователь будет читать его собственное значение. если вы не сохраните его вообще (я предполагаю, что это так), значение не будет сохранено (сбрасывается при каждом запросе для каждого пользователя). Вероятно, вы хотите что-то вроде этого (просто предположение):

int property MyInt {
    get { return Convert.ToInt32(ViewState["MyInt"]);}
    set { ViewState["MyInt"] = value; }
}
1 голос
/ 01 декабря 2009

Звучит как проблема с кешем для меня. Мастер-страницы не сохраняют данные между сессиями, но кэш будет. В любом месте своего проекта найдите, что вы помещаете информацию в кэш, и убедитесь, что в нее не попадают данные, относящиеся к конкретному пользователю или сеансу. Кэш должен содержать только информацию, которая относится ко всем пользователям в данный момент времени.

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