Несоответствие переменных сеанса между обратной передачей
Я храню переменную сеанса, которую я использую для передачи в качестве параметра для различных вызовов доступа к данным. Эта переменная устанавливается при первом создании сеанса и может быть изменена пользователем в зависимости от того, к каким ресурсам он имеет доступ. Например, когда пользователь впервые регистрируется в сеансе по умолчанию, его значение может быть установлено в "1". В верхнем углу страницы находится раскрывающийся список всех опций, к которым у них есть доступ, и изменение этого параметра приводит к изменению переменной сеанса... 1, 2, 3, 4... и т. Д.
Проблема заключается в том, что эта переменная сеанса может изменяться между обратными передачами по одной из следующих причин:
- Тайм-аут сеанса, заставляет сеанс воссоздать себя со значением по умолчанию 1
- Пользователь открывает две вкладки / окна браузера и меняет их на одной вкладке, затем переключается обратно на другую, где страница отображается с использованием "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);
}
}
Почему бы вам не использовать куки вместо того, чтобы хранить эту переменную? Я думаю, что обе ваши проблемы будут решены с этим.