Как обработать истечение срока действия сеанса (логически) в ASP Classic и не потерять данные?

#asp-classic

#asp-classic

Вопрос:

У меня есть система, в которой люди оценивают документы, и иногда они оставляют клавиатуру и возвращаются к публикации — чтобы узнать, что их сеанс истек. Конечно, все данные затем теряются.

Я хотел бы хотя бы попытаться сохранить часть этого (у меня есть некоторые переменные из опубликованных строк данных формы / запроса).

Как вы справляетесь с этими ситуациями? Люди просто облажались, если не сохранили?

Ответ №1:

Предостережение, в большинстве ситуаций вы правы, пользователь фактически облажался. Увеличение времени ожидания — это одна вещь, которую я делал в прошлом. Я могу придумать три идеи, которые помогут вам начать.

1) Вы можете попробовать поработать с функцией Session_OnEnd в Global.asa. Это позволит вам запускать некоторый код по истечении срока действия сеанса. К сожалению, я не думаю, что у него есть доступ к запросу.сбор форм… тем самым побеждая точку.

2) Если вы хотите отбросить осторожность, вы всегда можете сохранить некоторую зашифрованную форму идентификации пользователя в скрытой переменной в форме. Таким образом, если время ожидания сеанса истекло на следующей странице…. вы все еще можете выяснить, кто отправил форму. Очевидно, что это открывает вам возможности для злоупотреблений, если пользователи выяснят, что они могут просто выдавать себя за пользователя, изменяя значения формы. Вероятно, достаточно хорошего шифрования их идентификатора пользователя / имени пользователя.

3) Наконец, вы могли бы изменить механизм сохранения, чтобы значения сохранялись (возможно, через AJAX или просто нажав «Сохранить» в каждой строке) по мере ввода их пользователем. Таким образом, если они заполнят половину страницы, они уже передадут эти данные в базу данных.

Разочарование, я знаю!

Ответ №2:

Несколько вариантов:

  • Увеличьте время ожидания
  • Используйте meta refresh , который сработает до истечения времени ожидания, чтобы сеанс оставался в живых
  • То же самое, что meta refresh , только с использованием javascript (возможно, ajax-вызова), сброс таймера при каждом перемещении мыши или используемой клавиатуры

Комментарии:

1. Будет ли мета-обновление перезагружать страницу и терять какие-либо значения, введенные в формах?

2. @Caveatrob — Это перезагрузит страницу. Итак, в зависимости от браузера значения могут быть потеряны.

Ответ №3:

У нас есть система с большим количеством мастеров. Мы написали некоторый код для выполнения следующего:

  1. установите cookie для каждого уникального пользователя
  2. храните каждое значение формы в простой таблице ключ-значение в SQL, в базе данных для каждого пользователя / для каждого каталога. (таким образом, у каждого пользователя есть набор переменных мастера для каждого каталога)

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

Все значения хранятся в виде текста, у нас есть библиотека функций для «приведения» их обратно к правильному формату. даты хранятся в формате ГГГГ-ММ-ДД, поэтому они всегда отображаются правильно, двойные / плавающие значения восстанавливаются на основе десятичных настроек пользователя. Это классический ASP, поэтому разработчик должен убедиться, что данные поступают в мастер правильно и выходят из него. Разработчику также придется помнить, какая переменная мастера является текстом, который представляет собой дату и время.

Все это реализовано как WSC, поэтому легко повторно использовать код.

Требуется некоторая работа по настройке, но наличие десятков мастеров делает это очень удобным решением в нашем случае.

HTH

Комментарии:

1. Я не думаю, что вы были бы готовы опубликовать небольшой пример кода? Спасибо!

Ответ №4:

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

Вы также могли бы добиться того же самого с помощью запроса ajax по времени со страницы, которую они используют.