2013-07-31 5 views
1

У меня есть простая форма, которая имеет четыре поля с именем firstName, lastName, адрес и номер телефона.Как предотвратить заполнение полей форм после нажатия кнопки «Назад»?

После того, как пользователь заполнит эту форму и нажимает кнопку отправки, если все идет хорошо, я перенаправляю этого пользователя на страницу успеха.

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

Я уже попробовал этот код:

<cfheader name="cache-control" value="no-cache, no-store, must-revalidate"> 
<cfheader name="pragma" value="no-cache"> 
<cfheader name="expires" value="#getHttpTimeString(now()-1)#"> 

Но это не работает.

ответ

5

Повторное заполнение полей формы хорошее вещь, прекратите пытаться ее сломать.

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

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

+3

Я больше не мог согласиться. Самый большой вопрос: «Какова моя конечная цель в этом?» Если вы просто хотите, чтобы люди не возвращали форму, предложение Петра - хороший способ пойти. Если вы хотите, чтобы люди не возвращались в форму, вы можете спросить себя, почему. Использование кнопки «Назад» для обновления формы может быть нежелательным, но это не является необоснованным с точки зрения пользователя. Если вы не хотите двойных представлений, вы должны проверить это на форме submit. Из личного опыта перепрограммирование нормального поведения браузера действительно может сосать. – Shawn

+0

Хорошо ли это не вопрос –

2

заселив поля формы хороший думаю, я знаю, но мы можем отключить его с помощью автозаполнения = «выкл»

+4

autocomplete = off очень раздражает, когда вы являетесь пользователем. –

+2

Атрибут 'autocomplete' предназначен для заполнения форм, когда вы впервые посещаете страницу (в зависимости от того, как вы заполняли подобные формы раньше), а не при нажатии кнопки« Назад ». –

+0

Да, я знаю это, но он работает и для моего дела во всех браузерах. –

0

Это работает, когда я запускаю его. Во-первых, файл testform.cfm

<cfsetting showdebugoutput="no"> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<CFHEADER NAME="Cache-Control" VALUE="no-cache, no-store, must-revalidate"> 
<!--- this is meant for legacy HTTP 1.0 servers 
- only prevents caching when used with secure communications (https://) ---> 
<CFHEADER NAME="Pragma" VALUE="no-cache"> 
<!--- this doesn't prevent caching, 
just means for future requests that browser must contact server for fresh copy. 
cached copy used for BACK and FORWARD buttons---> 
<CFHEADER NAME="Expires" VALUE="-1"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<form action="formtarget.cfm" method="post"> 
<input type="text" name="x" value="" /> 
<input name="submitbutton" type="submit" /> 
</form> 
</body> 
</html> 

Это formtarget.cfm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Untitled Document</title> 
</head> 
<body> 
<cfdump var="#form#"> 
</body> 
</html> 

У нас есть эти три cfheader теги в пользовательского тега.

Смежные вопросы