Как правильно обрабатывать обновление страницы?

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

Я не уверен, что должно произойти, когда пользователь обновит страницу в браузере:

  1. если пользователь нажал F5 в FF, то значения полей по-прежнему отображаются в браузере;
  2. когда пользователь нажимает Ctrl+F5, значения очищаются.

В обоих случаях я не хочу создавать новую запись для этого пользователя, поэтому идентификатор клиента должен оставаться прежним. Но в сценарии (1) я НЕ должен очищать значения поля в хранилище данных и его оценку, но я должен сделать это в сценарии (2). Как я могу распознать это на стороне сервера?


person LA_    schedule 08.03.2012    source источник
comment
Почему вы создаете клиентскую сторону идентификатора клиента?   -  person Shay Erlichmen    schedule 08.03.2012
comment
@ShayErlichmen, он создается на стороне сервера.   -  person LA_    schedule 08.03.2012


Ответы (3)


Два описанных вами сценария — это поведение, встроенное в ваш браузер. Большинство браузеров попытаются повторно отправить данные формы, если вы нажмете F5 на странице, где данные были отправлены. Это делается для того, чтобы избежать потери данных обычным пользователем.

Это как если бы вы зашли на сайт, заполнили форму и снова нажали «Отправить».

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

person aaroncatlin    schedule 08.03.2012

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

Если пользователь обновит страницу, извлеките значения из базы данных с идентификатором SESSION.

Когда пользователь нажимает кнопку отправки и успешно запрашивает значения в базе данных. Уничтожить SESSION ID, сбросить поля формы...

person Avin Varghese    schedule 08.03.2012

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

person Raja    schedule 08.03.2012
comment
Что делать, если он сохранен в хранилище данных? Показать это в соответствующем поле? (на самом деле у меня ~150 полей) - person LA_; 08.03.2012