Метод поддержания сеанса. Некоторые люди советуют устанавливать session.timeout=-1 или число меньше 0. Этот метод определенно невозможен. Время расчета сеанса указывается в минутах и должно быть целым числом, большим или равным 1. Кто-то еще сказал установить session.timeout=99999. Это тоже не работает, сеанс имеет максимальный лимит времени. После тестирования я обнаружил, что максимальное значение составляет 24 часа, а это значит, что максимум, который вы можете иметь, — это session.timeout=1440, а 1441 не допускается, ха-ха. Моя тестовая среда: win2003+IIS6.0+ASP3.0.
Таким образом, невозможно сделать так, чтобы сеанс никогда не истекал, установив время истечения срока действия session.timeout. Запись в файлы cookie — лучший метод. В Интернете много таких руководств, поэтому я не буду вдаваться в их описание! Другой метод — настроить скрытый iframe на странице, где должен поддерживаться сеанс. Время от времени (это время меньше времени session.timeout) обновляйте пустую страницу во фрейме! Способ реализации следующий:
Добавьте следующее на страницу сеанса, где вы хотите ее сохранить:
Скопируйте код кода следующим образом:
<iframe width=0 height=0 src=/blog/SessionKeeper.asp></iframe>
Создайте файл SessionKeeper.asp в том же каталоге. XML/HTMLСкопировать код
Скопируйте код кода следующим образом:
<html>
<голова>
<meta http-equiv=Обновить контент=900000;url=sessionKeeper.asp>
<!--Обновляйтесь каждые 900 секунд, чтобы поддерживать связь с сервером и не допустить потери сеанса-->
</голова>
</html>
Этот метод относительно распространен, и есть еще один метод, аналогичный приведенному выше, но он не использует мета для автоматического обновления вложенных iframe. Он использует javascript:window.setTimeout(functionname(),10000); для автоматического вызова функции через определенные промежутки времени. Конечно, функции все равно необходимо подключаться к пустому файлу. Конкретный метод заключается в следующем:
Добавить: код копирования JavaScript в сеанс, который будет поддерживаться.
Скопируйте код кода следующим образом:
<script id=Back Language=javascript></script>
<язык сценария=javascript>
функция сохраняет сессию(){
document.all[Back].src=/blog/SessionKeeper.asp?RandStr=+Math.random();
//Значение RandStr=Math.random здесь предназначено только для того, чтобы значение back.src каждый раз было разным, чтобы обновление одного и того же адреса не было недействительным.
window.setTimeout(keepsession(),900000); //Вызываем себя каждые 900 секунд;
}
сохраняет сессию();
</script>Таким образом, просто создайте файл sessionKeeper.asp с пустым содержимым в том же каталоге!
Проблема не решена: проблем с поддержанием сеанса с помощью вышеуказанного метода возникнуть не должно. Значение IIS по умолчанию для очистки сеанса без запроса составляет 20 минут. Время, которое я установил для каждой интерактивной службы, намного меньше этого значения. но у меня это занимает около суток. Спустя много времени сессия все равно пропадает без причины! депрессивный.
Позже я поискал много мест в Интернете и, наконец, нашел ответ: Оказывается, для защиты сервера в IIS есть концепция переработки! После длительного тестирования я наконец получил общее представление (не смейтесь надо мной^-^). Давайте сначала посмотрим, где организована эта переработка.
Запустите Диспетчер IIS->Пул приложений->Щелкните правой кнопкой мыши->Свойства->вкладка «Перезапустить». По умолчанию работает один элемент: «Перезапустить рабочий процесс (минуты). Значение по умолчанию составляет около 1740 минут». 29 часов. Что он имеет в виду? Мое личное понимание: все текущие сеансы будут автоматически очищены через 1740 минут после session.timeout. Это значение можно установить максимум на 4 000 000, что примерно больше 2700 дней! Я отменил его напрямую, без его автоматической переработки! Проблема наконец решена.
Кроме того, в этом диалоговом окне свойств есть еще несколько элементов:
Второй пункт следует сдать в переработку, когда количество подключенных пользователей превысит определенное количество.
Третий пункт — автоматическая переработка в определенное время.
На вкладке «Производительность» завершите рабочий процесс после простоя в течение этого периода времени. Здесь задается время сеанса IIS по умолчанию. Значение по умолчанию — 20 минут. Максимальное значение здесь также может быть установлено на 4000000, что отличается от установки максимального значения session.timeout на 1440 на странице ASP. Я не проверял, будет ли работать установка значения больше 1440, думаю, это возможно. Так почему же максимальное значение session.timeout на странице ASP может быть всего 1440, а в свойствах IIS оно может быть установлено таким большим? Это должен быть механизм защиты: любой пользователь может установить значение session.timeout на странице ASP, но только администратор может установить его в IIS. У этих двух файлов разные разрешения, поэтому диапазон настроек различен.