Как обработать истечение сеанса (логически) в ASP Classic и не потерять данные? - PullRequest
1 голос
/ 07 ноября 2011

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

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

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

Ответы [ 4 ]

1 голос
/ 07 ноября 2011

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

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

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

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

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

0 голосов
/ 07 ноября 2011

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

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

0 голосов
/ 07 ноября 2011

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

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

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

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

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

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

HTH

0 голосов
/ 07 ноября 2011

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

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