Каков наилучший способ защиты пользовательских данных (еще не отправленных) от тайм-аута сеанса? - PullRequest
4 голосов
/ 31 октября 2008

Я занимаюсь разработкой и обслуживанием небольших веб-приложений для интрасети (JSP и Resin).

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

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

Что такое лучшие практики?


Добавление Наши пользователи делают несколько видов отчетов с помощью веб-приложения, и все содержимое каждого отчета хранится в JavaBean, сохраненном в сеансе.

Как полагают некоторые, Ajax или iframe должны быстро исправить ситуацию.

Теперь я знаю, что лучше не злоупотреблять сессией с тяжелыми предметами, но я не уверен, как лучше реорганизовать текущий беспорядок. Некоторые люди предлагали сделать веб-приложение без состояний . Любые предложения по рефакторингу приветствуются.

Ответы [ 9 ]

7 голосов
/ 31 октября 2008

Это может или не может иметь место в вашей среде, но я думаю, что если ваша страница просто использует AJAX для вызова сервера каждые пять минут (или что-то еще), то это будет поддерживать сеанс вашего пользователя живым. Вам даже не нужно делать частичное сохранение вашей формы таким образом.

4 голосов
/ 31 октября 2008

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

В качестве примера можно привести нечто подобное в вашей форме:

<input type="hidden" name="user" value="bob" />
<input type="hidden" name="currentRecordId" value="2345" />
<input type="hidden" name="otherStuff" value="whocares" />

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

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

2 голосов
/ 31 октября 2008

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

Что вам нужно сделать, это добавить скрытый iframe где-нибудь на странице. Пусть iframe указывает на простой HTML-документ, обслуживаемый сервером приложений, в котором есть метатег, который обновляется каждые 29 минут (для сеанса, который заканчивается через 30 минут). Таким образом, пока у человека открыта ваша веб-страница, его сеанс не истечет. Однако, когда они уходят с вашего сайта, он истекает как обычно. Вы получаете неограниченную продолжительность сеанса без недостатков сеансов, которые выходят из-под контроля.

Я успешно развернул это решение в корпоративной среде на прежнем месте работы. Веб-приложение заменило старое приложение с зеленым экраном, и для них было неприемлемо идти на обед и, к примеру, истек срок действия приложения.

Дайте мне знать, если вам нужно больше примеров.

2 голосов
/ 31 октября 2008

Мне только недавно потребовалось найти решение этой проблемы.

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

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

1 голос
/ 31 октября 2008

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

Возможно, мы сможем помочь больше, если будем знать, для чего именно вы рассчитываете на сеансы.

0 голосов
/ 09 ноября 2015

Я бы вызвал «после проверки Ajax, что сессия истекла» всплывающей формы в модальном окне, в которое пользователь должен войти снова. Это всплывающее наложение будет поверх текущей страницы / формы. Таким образом, данные не будут потеряны.

P.N Обновите маркер сеанса, если у U есть один ... в скрытом поле.

0 голосов
/ 31 октября 2008

Не используйте объект сеанса. Это является причиной всевозможных проблем с юзабилити - как вы обнаруживаете.

Это мое золотое правило разработки веб-приложений: не используйте сессию.

Сказав это, используйте его экономно для вещей, которые просто невозможно сделать иначе.

0 голосов
/ 31 октября 2008

Ммм ..

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

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

0 голосов
/ 31 октября 2008

Вы можете время от времени сохранять данные в файле cookie, использовать Gears в качестве временного хранилища (если данные сложны или требуют хранения более 4 КБ) или отправлять временные данные на сервер каждую n секунду, используя AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...