Чтобы облегчить состояние сеанса нескольких вкладок для одного пользователя без загромождения URL-адреса, выполните следующие действия.
В функции загрузки формы, включают в себя:
If Not IsPostback Then
'Generate a new PageiD'
ViewState("_PageID") = (New Random()).Next().ToString()
End If
Когда вы что-то сохранить для вашего состояния сеанса, включают PageId:
Session(ViewState("_PageID").ToString() & "CheckBoxes") = D
Notes:
- As с идентификаторами сеанса в целом, вы не можете верить, что злонамеренные зрители не изменятся SessionID/PageID. Это только допустимое решение для среды, где всем пользователям можно доверять. К счастью, ViewState предлагает больше защиты, чем использование скрытого поля ввода.
- У вас не будет доступа к PageID, пока ViewState не будет восстановлен после PostBack. Поэтому у вас не будет доступа к идентификатору страницы в обработчике page_init().
Для разработчиков, использующих веб-формы ASP.NET, вы можете получить степень защиты от вредоносных пользователей, искажающих идентификатор страницы, используя ViewState, а не скрытое скрытое поле HTML. По умолчанию ViewState хешируется ключом машинного сервера, а ASP.NET генерирует исключение, если опубликованные данные не являются допустимым хэшем. Если идентификатор сеанса изменен, это, как правило, приведет к созданию нового сеанса, когда на него будут записаны следующие данные, поскольку существующий сеанс будет недействительным - попытки отозвать существующие данные приведут к пустым ссылочным исключениям. Мог бы проверить это свойство IsNewSession. – pwdst
@pwdst Отличная точка, я настрою решение для соответствия! Спасибо –
Это отличное решение вопроса, который я должен был решить на этой неделе для обеспечения целостности данных на работе. Пользователи открывали вторую вкладку, а затем возвращались для обновления записи, хранящейся на первой вкладке, причем, конечно, данные сеанса, связанные со второй записью. Я использовал вариант этого решения, чтобы предотвратить неправильные обновления в неправильной записи. – pwdst