Увеличение времени сеанса - PullRequest
13 голосов
/ 28 декабря 2011

Сайт размещен на IIS 7.0

Я бы хотел установить время ожидания сеанса в моем приложении ASP.NET на 9 часов.
Это было установлено в Интернете.config

<sessionState timeout="540"></sessionState>

Но, как я понимаю, если в IIS, где размещен веб-сайт, установлен тайм-аут, равный 20 минутам, настройка расширенного состояния сеанса будет бесполезной.

Во-первых, я хотел бы подтвердить, правильно ли это предположение.

Проблема в том, что у меня нет доступа к IIS моего общего размещенного веб-сервера.

Теперь, после некоторых исследований, я нашел другое решение в проекте кода.Это звучит как wonderful idea.Идея состоит в том, чтобы вставить iframe на главную страницу.Iframe будет содержать другую страницу с мета-обновлением менее чем за 20 минут.

 Response.AddHeader("Refresh", "20");

Эта идея показалась мне полезной.Но статье 7 лет.Плюс в разделе комментариев пользователь жалуется, что это не будет работать, если страница свернута, и я беспокоюсь, что то же самое происходит, когда вкладка моих страниц не активна.

Я хотел бы знать эти вещи

  1. Будет ли метод обновления работать для моего сценария, даже если страница свернута?
  2. Существуют ли другие методы, которые могут увеличить время ожидания сеанса, которое переопределяет настройку времени ожидания IIS?
  3. Также я прочитал некоторые вопросы в Переполнение стека, где в ответах указано, что время ожидания сеанса IIS для классических страниц ASP .Тогда почему мой расширенный тайм-аут не срабатывает?

1 Ответ

7 голосов
/ 28 декабря 2011

Во-первых, я хотел бы подтвердить, верно ли это предположение.

Да, это предположение абсолютно верно, если вы используете режим состояния сеанса в памяти.В этом случае сеанс сохраняется в памяти, и, поскольку IIS может разрушить домен приложения при различных обстоятельствах (период бездействия, пороги ЦП / памяти достигнуты ...), данные сеанса будут потеряны.Вы можете использовать режим состояния сеанса вне процесса.Либо StateServer или SQLServer.В первом случае сеанс хранится в памяти специального выделенного компьютера, на котором запущена служба Windows при наличии состояния, а во втором случае это выделенный сервер SQL.SQL Server является самым надежным, но, очевидно, самым медленным.

1) Будет ли работать метод обновления для моего сценария, даже если страница свернута?

скрытый iframe по-прежнему работает для поддержания сеанса в рабочем состоянии, но, как я уже говорил ранее, могут быть некоторые условия, когда IIS все равно выгружает приложение (пороги ЦП / памяти достигаются => вы также можете настроить это в IIS).

2) Существуют ли другие методы, которые могли бы увеличить время ожидания сеанса, которое отменяет настройку времени ожидания IIS?

Предыдущий метод не увеличивает время ожидания сеанса.Он просто поддерживает работу сеанса, отправляя HTTP-запросы на сервер через регулярные промежутки времени, чтобы IIS не мог закрыть AppDomain.

3) Также я прочитал некоторые вопросы в Переполнение стека, где в ответах говорится, чтоТайм-аут сеанса IIS для классических страниц ASP.Тогда почему мой расширенный тайм-аут не срабатывает?

Нет такой вещи, как тайм-аут сеанса IIS.Сеанс является артефактом ASP.NET.IIS - это веб-сервер, который ничего не знает о сессиях.

Лично я не использую сессии в своих приложениях.Я просто отключаю их:

<sessionState mode="Off"></sessionState>

и использую стандартные артефакты HTTP, такие как куки, параметры строки запроса, ... для поддержания состояния.Я предпочитаю сохранять информацию в моем бэкэнде и получать ее позже, используя уникальные идентификаторы, а не полагаться на сеансы.

...