Несоответствие переменных сеанса между обратной передачей

Я храню переменную сеанса, которую я использую для передачи в качестве параметра для различных вызовов доступа к данным. Эта переменная устанавливается при первом создании сеанса и может быть изменена пользователем в зависимости от того, к каким ресурсам он имеет доступ. Например, когда пользователь впервые регистрируется в сеансе по умолчанию, его значение может быть установлено в "1". В верхнем углу страницы находится раскрывающийся список всех опций, к которым у них есть доступ, и изменение этого параметра приводит к изменению переменной сеанса... 1, 2, 3, 4... и т. Д.

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

  1. Тайм-аут сеанса, заставляет сеанс воссоздать себя со значением по умолчанию 1
  2. Пользователь открывает две вкладки / окна браузера и меняет их на одной вкладке, затем переключается обратно на другую, где страница отображается с использованием "1" для значения

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

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

Есть идеи?

2 ответа

Решение

В итоге я добавил HiddenField на свою мастер-страницу, а затем поместил это в коде:

        if (!Page.IsPostBack)
        {
            //SelectedID comes from masterpage property (Session variable)
            hiddenField.Value = SelectedID.ToString();

            ...
        }
        else
        {
            int selectedId = Int32.Parse(hiddenField.Value);
            if (selectedId != SelectedID)
            {
                Response.Redirect(Request.RawUrl);
            }
        }

Почему бы вам не использовать куки вместо того, чтобы хранить эту переменную? Я думаю, что обе ваши проблемы будут решены с этим.

Другие вопросы по тегам