Я обеспокоен возможностью отметаемых сессий своих пользователей. Я использую объект Сессии ASP.NET по умолчанию и сеансовые куки. Я знаю, что сессии могут испытать таймаут, и я установил значение тайм-аута для своих сессий к нескольким часам для предотвращения неожиданных тайм-аутов.
Но существует по крайней мере два других случая, по поводу которых я волнуюсь.
(1) Я понимаю, что ASP.NET периодически перерабатывает домен приложения выполнение сайта/веб-приложения (не уверенный, если у меня есть вся терминология, корректная здесь). Сессии живут через них, перерабатывают события?
(2) По крайней мере, на моем сервере разработки, определенные изменения, которые я вношу в сайт (например, добавляя новую страницу), кажется, заставляют активную сессию быть проигранной, когда сайт (или часть его) перекомпилирован. Этого, кажется, не происходит с каждым изменением, но со многими оно делает. Я особенно обеспокоен тем, что это означает для возможности изменений, в то время как мой сайт жив. Я хотел бы знать правила для того, что я могу обновить, не заставляя активные сессии быть уничтоженным.
Спасибо за любые указатели.
Это зависит от Вашего режима сеанса. Вот копия того, что Вы можете найти на Поддержка Microsoft:
ASP.NET поддерживает три режима session state:
- InProc: В режиме-Proc значения сохраняются в памяти ASP.NET. рабочий процесс. Таким образом, этот режим предлагает самый быстрый доступ к этим значениям. Однако, когда работник ASP.NET циклы обработки, данные о состоянии lost.
- StateServer: С другой стороны, режим StateServer использует автономный служба Microsoft Windows для хранения переменные сессии. Потому что это служба не зависит от Microsoft Информационный Интернет-сервер (IIS), это может работать на отдельном сервере. Вы можете использовать этот режим для балансировки нагрузки решение потому, что несколько веб-серверов может делиться переменными сессии. Хотя переменные сессии не теряются, если Вы перезагрузка IIS, влияет на производительность когда вы пересекаете границы процесса.
- SqlServer: Если вы сильно обеспокоены сохранением информация о сеансе, вы можете использовать Режим SqlServer для использования Microsoft SQL Server для обеспечения наивысшего уровня надежности. Режим SqlServer аналогично внепроцессному режиму, за исключением что данные сессии хранятся в SQL-сервер. Режим SqlServer также позволяет использовать государственный магазин который находится вне процесса IIS и который может быть расположен на местном компьютера или удаленного сервера.
Если вы используете StateServer или базу данных, данные вашей сессии не будут потеряны, когда IIS обнаружит изменение на сайте.
.(1) Если вы используете в режиме "В процессе сессии" на Recycling the application pool (Восстановление пула приложений), вы потеряете информацию о сессии
(2) Зависит от того, используете ли вы веб-приложение или модель сайта для вашего приложения asp.net. Некоторые файлы кэшируются при запуске приложения и требуют перезапуска или перекомпиляции, если они были изменены. Эмпирическое правило заключается в том, что если вы измените Global.asax, конфигурационный файл добавления, удаления или редактирования файла в папке \bin, то будет выдан перезапуск приложения и данные In Process Session будут потеряны.
ASP.NET Session имеет много недостатков, и многие разработчики его вообще не используют. Лично я предпочитаю хранить данные в пользовательских таблицах на сервере SQL (если есть).
Если вы хотите предоставить больше информации, например, какую версию IIS вы имеете, используете ли вы вебсайт или модель веб-приложения, есть ли у вас доступный сервер базы данных, используете ли вы веб ферму или сервер веб сада, и какую информацию вы хотите хранить, и как долго я могу дать вам более конкретный совет.
.Если вы используете режим InProc, вы потеряете данные о сессии, если AppPool будет переработан, что может произойти либо раз в день или около того (согласно расписанию по умолчанию), либо примерно через 20 минут бездействия на сервере.
Что касается обновлений страниц: каждый раз, когда вы меняете файл на живом сайте, есть вероятность того, что сайт перезапустится, как если бы вы изменили web.config. Некоторые файлы не приведут к полному перезапуску, но нелегко предсказать, какие именно, а также это зависит от режима компиляции, который вы используете (пакетный или нет). Если вы используете режим пакетной компиляции по умолчанию для каждой папки, вы должны иметь возможность изменять отдельные страницы в подпапках без необходимости перезапуска. Изменения в мастер-страницах, коде или элементах управления, однако, могут вызвать перезапуск, так же как и изменения в папке верхнего уровня (в зависимости от того, что у вас там еще есть).
Думаю, мне следует добавить, что изменение отдельных файлов на живом сайте, как правило, не очень хорошая идея - хотя я уверен, что у вас есть на то причины.
.