Недавно мне было поручено исправить довольно неприятную ошибку, вызванную неправильным использованием состояния сеанса. У нас есть веб-приложение asp.net, которое выполняется на одном сервере с использованием состояния сеанса inproc. Основной дизайн состоит в том, что типизированный набор данных загружается из базы данных и сохраняется в состоянии сеанса с использованием общего имени переменной сеанса, такого как Session ["dataset"] = набор данных. После того, как данные сохранены в сеансе, пользователь редактирует данные, набор данных извлекается из сеанса, обновляется и отправляется в базу данных для обновления. Этот тип редактирования / хранения данных используется в нескольких веб-формах, которые в основном делают одно и то же. Все хорошо, пока пользователь не попытается запустить второй экземпляр приложения, и данные, хранящиеся в переменной сеанса, могут быть перепутаны.
Вот возможные исправления, которые мне удалось найти
Установить sessionState cookieless = "false" (каждый новый экземпляр получает уникальный идентификатор сеанса)
PROS - самое простое решение, практически не нужно менять код
CONS - guid в URL, пользователь может редактировать guid, guid можно скопировать
Используйте настраиваемый ключ сеанса для каждого экземпляра (передайте ключ сеанса и объедините его «набор данных» + имя ключа сеанса, чтобы каждый экземпляр имел уникальную переменную сеанса)
PROS - нет ссылки в URL
CONS - большая часть изменений кода, возможно хрупкая
Удалите переменную сеанса (Загрузите набор данных из базы данных во второй раз для редактирования)
PROS - освобождает ресурсы сервера, больше не зависит от состояния сеанса
CONS - снижение производительности, большое количество изменений кода
Кто-нибудь знает какие-либо другие возможные решения? Спасибо