Сделать страницу, чтобы браузер не кэшировал / сохранял входные значения


117

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

Вот моя проблема. Когда пользователь нажимает кнопку « Сохранить» , сервер проверяет данные, отправленные POST (например, проверенные продукты), и, если они недействительны, отправляет их обратно в браузер. Однако, как указано выше, даже если сервер отменяет выбор для некоторых значений, они все равно могут быть выбраны из-за кеша браузера!

В моих данных есть невидимые (пока не выбран родительский элемент) флажки, поэтому пользователь может даже не знать, что какое-то предыдущее значение все еще выбрано, до тех пор, пока снова не нажмете « Сохранить» и не получит сообщение об ошибке, даже если пользователь думает, что это не так. Что раздражает.

Это можно решить, сделав Ctrl+ F5, но это даже не решение. Есть ли автоматический / программный способ указать браузеру не кэшировать входные данные формы на какой-либо форме / странице?


1
Есть <form autocomplete="off"...вариант для вас? Эта проблема возникает во всех браузерах или только в одном?
Дэвид Колар,

Есть ли способ ответить на этот вопрос с помощью выпадающих <select>списков. У меня есть список, и я определил selectedвыбор, но при обновлении страницы сохраняются предыдущие выбранные параметры.
Martin

Я хочу добиться противоположного - сохранить входные значения каждой страницы на кнопке «Назад» (дважды щелкните назад, чтобы получить входные данные соответственно). Существуют различные примеры использования большого количества JS-кода (который на самом деле не работает, IMHO), но - есть ли более простой способ? Я пробовал autocomplete = "on" как в форме, так и в полях ввода - не работает. Браузер - Chrome.
Dmitry z

Ответы:


197

Вы явно устанавливаете значения как пустые? Например:

<input type="text" name="textfield" value="">

Это должно помешать браузерам помещать данные туда, где они не должны. В качестве альтернативы вы можете добавить autocompleteатрибут в тег формы:

<form autocomplete="off" ...></form>

1
Я говорю о флажках, поэтому не могу установить значение "". И означает ли отключение автозаполнения не сохранять входные значения формы «когда пользователь нажимает F5», а не только «для раскрывающегося списка автозаполнения»?
queen3

2
Согласно developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion , autcompletion = off влияет на «кеширование истории сеансов», по крайней мере, в Gecko. Я проверю, работает ли это для того, что мне нужно.
queen3

1
@ queen3: Да, флажки представляют собой проблему, поскольку нет возможности явно сказать «не отмечен». Если у вас все еще есть проблемы, вы можете попробовать checked="false", это может работать в некоторых браузерах. Другой альтернативой является использование Javascript / jQuery для явного снятия всех флажков при загрузке страницы.
DisgruntledGoat

1
@ queen3, вы имеете в виду «autocomplete = off», а не «autocompletion = off»
Мэтт Бейкер

2
Все ответы и предложения не помогли мне. Использование хрома и развитие .net
hakan

46

Из ссылки на переполнение стека

Он не работал со значением = "", если браузер уже сохраняет значение, поэтому вам следует добавить.

Для тега input вы можете установить атрибут autocomplete:

<input type="text" autocomplete="off" />

Вы также можете использовать автозаполнение для формы.


9
В Chrome это кажется autocomplete="off"неэффективным при использовании для отдельных элементов формы - даже если valueатрибут явно установлен пустым, и при отправке Cache-Control: Must-Revalidateзаголовка это не имело никакого эффекта. Мне пришлось применить autocomplete="off"атрибут к <form>самому элементу, чтобы подавить такое поведение в Chrome.
mindplay.dk

Я сделал autocomplete = "off" в форме, но у меня это не сработало
Кингсли Саймон

Мне нужна дополнительная информация @KingsleySimon, например, браузер, и у вас могут быть некоторые настройки в вашем браузере, которые мешают правильному поведению
shareef

1
похоже, что поведение браузера изменилось: developer.mozilla.org/en-US/docs/Web/Security/…
Дэвид

и обратите внимание на действительную форму html. и например это не форма внутри другого и т. д.
shareef

10

Другой подход - сбросить форму с помощью JavaScript сразу после формы в HTML:

<form id="myForm">
  <input type="text" value="" name="myTextInput" />
</form>

<script type="text/javascript">
  document.getElementById("myForm").reset();
</script>


6

Это сработало для меня в новых браузерах:

autocomplete="new-password"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.