Сессия ASP.NET и пропадающие значения

Бывают ситуации, когда записанное в сессию ASP.NET значение в какой то момент просто пропадает. Из за чего же может возникать данная проблема и как ее решить?

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

Первый вариант — «InProc» используется по умолчанию и использует оперативную память процесса IIS. Именно в этом случае значения в сессии могут теряться. Другой неприятный момент при использовании этого режима хранения сессий — сессия теряется при перезапуске приложения, что не позволит обновлять систему в горячем режиме, даже если изменения совсем небольшие.

В режимах, описанных ниже, проблема потери данных из сессии не наблюдается.

Второй вариант — «StateServer» позволяет хранить переменные в отдельном от IIS процессе. Оптимальное решение указанной выше проблемы.

Третий вариант — «SQLServer» хранение сессии в базе данных. Следует применять в случае когда хранение сессии требует очень большого количества памяти или требуется сохранение сессии во время перезагрузки сервера.

Обратите внимание на то, что в режимах, отличных от стандартного все объекты, хранимые в сессии, должны быть сериализуемыми

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

Еще одна возможная причина по которой теряются значения в сессии — остановка рабочего процесса по таймауту. Проверьте вот этот параметр: Shutdown worker processes after being idle for и поставьте значение для timeout чуть больше чем время жизни сессии.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *