Изменяет ли сайт ASP.NET активные сеансы?

Меня беспокоит возможность того, что мои сеансы пользователей будут сметены. Я использую объект сеанса ASP.NET по умолчанию и файлы cookie сеанса. Я знаю, что сеансы могут время от времени, и я установил значение тайм-аута для своих сеансов на несколько часов, чтобы избежать таймаутов ожидания.

Но есть, по крайней мере, два других случая, о которых я беспокоюсь.

(1) Я понимаю, что ASP.NET периодически перерабатывает домен приложения, в котором работает сайт/веб-приложение (не уверен, что у меня есть вся терминология здесь). Проводятся ли сеансы в этих событиях рециркуляции?

(2) По крайней мере, на моем сервере разработки некоторые изменения, которые я делаю на сайте (например, добавление новой страницы), по-видимому, заставляют активный сеанс теряться при перекомпиляции сайта (или его части). Кажется, это не происходит с каждым изменением, но со многими это происходит. Меня особенно беспокоит то, что это означает для возможности изменений, пока мой сайт жив. Я хотел бы знать правила для того, что я могу обновить, не убивая активные сеансы.

Спасибо за любые указатели.

Ответ 1

Это зависит от вашего режима состояния сеанса. Вот копия чего-то, что вы можете найти на Microsoft Support:

ASP.NET поддерживает три режима состояние сеанса:

  • InProc: режим In-Proc сохраняет значения в памяти ASP.NET рабочий процесс. Таким образом, этот режим предлагает самый быстрый доступ к этим значениям. Однако, когда рабочий ASP.NET процесс перерабатывает, данные состояния потеряны.
  • StateServer: альтернативно, режим StateServer использует автономный Служба Microsoft Windows для хранения переменные сеанса. Потому что это служба не зависит от Microsoft Информационный сервер Интернета (IIS), он может работать на отдельном сервере. Ты можешь используйте этот режим для балансировки нагрузки решение, поскольку несколько веб-серверов могут совместно использовать переменные сеанса. Несмотря на то что переменные сеанса не теряются, если вы перезагрузка IIS, производительность когда вы пересекаете границы процесса.
  • SqlServer. Если вы сильно обеспокоены сохранением информацию сеанса, вы можете использовать Режим SqlServer для использования Microsoft SQL Server для обеспечения наивысшего уровня надежности. Режим SqlServer - аналогично внепроцессному режиму, кроме что данные сеанса сохраняются в SQL Server. Режим SqlServer также позволяет использовать государственный магазин который находится вне процесса IIS и которые могут быть расположены на местном компьютер или удаленный сервер.

Если вы используете StateServer или базу данных, ваши данные сеанса не будут потеряны, когда IIS обнаружит изменение на веб-сайте.

Ответ 2

(1) Если вы используете режим сеанса процесса при переработке пула приложений, вы потеряете информацию о сеансе

(2) Зависит от использования веб-приложения или модели веб-сайта для вашего приложения asp.net. Некоторые файлы кэшируются при запуске приложения и требуют перезагрузки или перекомпиляции, если они изменены. Эмпирическое правило: если вы измените файл Global.asax, файл конфигурации добавления, удаления или редактирования файла в папке \bin, будет выдан перезапуск приложения, а в процессе сеанса данные будут потеряны.

В сеансе ASP.NET есть много недостатков, и многие разработчики не используют его вообще. Я лично предпочитаю хранить данные в пользовательских таблицах на SQL Server (если есть).

Если вы хотите предоставить больше информации, например, какую версию IIS у вас есть, используете ли вы модель веб-сайта или веб-приложения, есть ли у вас доступ к серверу базы данных, используете ли вы среду веб-фермы или веб-садового сервера и какую информацию вы хотите сохранить и как долго я могу дать вам более конкретные советы.

Ответ 3

Если вы используете режим InProc, вы потеряете данные сеанса, если AppPool будет перерабатываться, что может произойти либо один раз в день (по расписанию по умолчанию), либо через 20 минут бездействия на сервере.

Что касается обновлений страниц: в любое время, когда вы меняете файл на реальном сайте, есть вероятность, что сайт перезапустится, как если бы вы изменили web.config. Некоторые файлы не вызовут полного перезапуска, но нелегко предсказать, какие из них, а также зависят от используемого вами режима компиляции (пакетный или нет). Если вы используете режим групповой компиляции по умолчанию для каждой папки, вы должны иметь возможность изменять отдельные страницы во вложенных папках без принудительного перезапуска. Однако изменения в главных страницах, коде или элемента управления могут привести к перезапуску, а также изменения в папке верхнего уровня (в зависимости от того, что у вас там есть).

Думаю, я должен добавить, что смена отдельных файлов на живом сайте вообще не очень хорошая идея, хотя я уверен, что у вас есть причины для этого.