Мне недавно было поручено установить довольно неприятную ошибку, вызванную неправильным использованием состояния сеанса. У нас есть веб-приложение asp.net, которое работает на одном сервере с использованием состояния сеанса inproc. Основной дизайн заключается в том, что типизированный набор данных загружается из базы данных и сохраняется в состоянии сеанса с использованием общего имени переменной сеанса, такого как Session ["dataset"] = набор данных. После того, как данные хранятся в сеансе, пользователь редактирует данные, набор данных извлекается из сеанса, обновленного и отправленного в базу данных для обновления. Этот тип редактирования данных \ сохранение используется в нескольких веб-формах, которые в основном делают то же самое. Все хорошо, пока пользователь не попытается запустить второй экземпляр приложения, и данные, хранящиеся в переменной сеанса, могут быть замешаны.Как лучше всего исправить проблему переменной состояния сеанса InProc multi?
Вот возможные исправления, которые я смог не найти
Set sessionState Cookieless = «ложь» (каждый новый экземпляр получает уникальный идентификатор сеанса) ПРОФИ - простое решение, практически нет коды необходимые изменения CONS - guid in url, пользователь может редактировать guid, guid может быть скопирован
Используйте специальный ключ сеанса для каждого экземпляра (передайте ключ сеанса и соедините его с «набором данных» + имя сеанса сеанса, каждый экземпляр имеет уникальную переменную сеанса) PROS - нет Guid в URL-адрес СВОД - наибольшее количество изменений кода, возможно хрупкое
Удалить переменную сеанса (Load набора данных из базы данных во второй раз для редактирования) отождествлялась высвобождает ресурсы сервера, больше не зависит от состояния сеанса СВОД - падение производительности, высокое количество изменений кода
Каждый знает о любых других возможных решений? Спасибо
Согласен, данные кэширования для каждого пользователя плохие. Вот почему я пытаюсь это исправить. Когда вы говорите, что используете «глобальный кеш», я не уверен, что вы имеете в виду. Я использовал кэш приложений для данных приложения, но как это работает для данных, загружаемых для каждого пользователя? – NullReference
Глобальный относительный, для каждого приложения это то, что я думал :) Если вам действительно нужно иметь данные для каждого пользователя, вы можете сохранить эти данные с помощью ключа, который подключен к пользователю. Но опять же, я не рекомендую кэш, если у вас действительно проблемы с производительностью. – Onkelborg