Tarayıcıya giriş değerlerini önbelleğe almamasını / korumamasını söylemek için sayfa oluşturun


117

Çoğu tarayıcı, giriş değerlerini önbelleğe alır. Dolayısıyla kullanıcı bir sayfayı yenilediğinde, girişler aynı değerlere sahip olur.

İşte benim sorunum. Bir kullanıcı Kaydet'i tıkladığında , sunucu POST ile gönderilen verileri (örn. Kontrol edilen ürünler) doğrular ve geçerli değilse tarayıcıya geri gönderir. Ancak, yukarıda belirtildiği gibi, sunucu bazı değerler için seçimi temizlese bile, bunlar tarayıcı önbelleği nedeniyle yine de seçilebilir!

Verilerimde görünmez onay kutuları var (üst öğe seçilene kadar), bu nedenle kullanıcı, Kaydet'i tekrar tıklayıp bir hata mesajı alana kadar önceki değerlerden bazılarının hala seçili olduğunun farkında olmayabilir - kullanıcı öyle olmadığını düşünse bile. Bu rahatsız edici.

Bu Ctrl+ yaparak çözülebilir F5, ancak bu bir çözüm bile değildir. Tarayıcıya bir form / sayfadaki form giriş verilerini önbelleğe almamasını söylemenin otomatik / programlı bir yolu var mı?


1
Senin için <form autocomplete="off"...bir seçenek mi? Bu sorun tüm tarayıcılarda mı yoksa özellikle yalnızca birinde mi ortaya çıkıyor?
David Kolar

Açılır <select>listelerle bu soruyu cevaplamanın bir yolu var mı ? Bir listem var ve bir selectedseçenek belirledim ancak sayfayı yenilemek önceki seçili seçenekleri koruyor.
Martin

Ben tam tersini elde etmek istiyorum - her sayfanın giriş değerlerini geri düğmesinde koruyun (iki kez geri tıklayın - buna göre girişleri alın). Çok fazla JS kodu kullanmanın çeşitli örnekleri var (ki bunlar gerçekten IMHO'da çalışmıyor) ama - daha basit bir yol var mı? Hem form hem de giriş alanlarında autocomplete = "on" denedim - çalışmıyor. Tarayıcı Chrome'dur.
Dimitri z

Yanıtlar:


197

Değerleri açıkça boş olarak mı ayarlıyorsunuz? Örneğin:

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

Bu, tarayıcıların verileri olmaması gereken yerlere koymasını durdurmalıdır. Alternatif olarak, autocompleteniteliği form etiketine ekleyebilirsiniz :

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

1
"" Değerini ayarlayamamak için onay kutularından bahsediyorum. Ve, otomatik tamamlamanın kapalı olması, "kullanıcı F5'e bastığında" form giriş değerlerini saklamamak anlamına mı gelir, yalnızca "açılır otomatik tamamlama listesi için" değil mi?
kraliçe3

2
Göre developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion , autcompletion = kapalı Gecko en azından, "Oturum geçmişi önbelleğe alma" etkiler. İhtiyacım olan şey için işe yarayıp yaramadığını test edeceğim.
kraliçe3

1
@ queen3: Evet, açıkça "işaretlenmedi" demenin bir yolu olmadığı için onay kutuları bir sorundur. Hala sorun yaşıyorsanız, deneyebilirsiniz checked="false", bazı tarayıcılarda çalışabilir. Diğer bir alternatif, sayfa yüklemede tüm onay kutularının işaretini açıkça kaldırmak için Javascript / jQuery kullanmaktır.
DisgruntledGoat

1
@ queen3, "otomatik tamamlama = kapalı" demek değil, "otomatik tamamlama = kapalı"
Matt Baker

2
Tüm cevaplar ve öneriler benim için işe yaramadı. Chrome ve geliştirme .net'i kullanma
hakan

46

Gönderen bir yığın taşması referans

Tarayıcı değeri zaten kaydederse, değer = "" ile çalışmaz, bu yüzden eklemelisiniz.

Bir giriş etiketi için ayarlayabileceğiniz otomatik tamamlama özniteliği vardır:

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

Otomatik tamamlamayı bir form için de kullanabilirsiniz.


9
Chrome'da, öznitelik açıkça boş bırakılsa autocomplete="off"bile tek tek form öğelerinde kullanıldığında hiçbir etkisi yoktur valueve bir Cache-Control: Must-Revalidatebaşlık gönderirken bunun bir etkisi olmaz. Chrome'da bu davranışı bastırmak için autocomplete="off"özelliği <form>öğenin kendisine uygulamam gerekiyordu.
mindplay.dk

formda otomatik tamamlama = "kapalı" yaptım ama benim için işe yaramadı
Kingsley Simon

Ben tarayıcı gibi daha fazla bilgi @KingsleySimon gerekir ve doğru davranışları önlemek tarayıcınızda bazı ayarları olabilir
shareef

1
tarayıcının davranışı değişmiş gibi görünüyor: developer.mozilla.org/en-US/docs/Web/Security/…
david

ve html geçerli formu not edilmelidir. ve örneğin, başka birinin içinde değil, vb
shareef

10

Diğer bir yaklaşım, HTML'deki formun hemen ardından JavaScript'i kullanarak formu sıfırlamak olacaktır:

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

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

8

Temel olarak, önbelleği temizlemenin iki yolu vardır:

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

veya

$('#Textfiledid').attr('autocomplete', 'off');

6

Bu, daha yeni tarayıcılarda benim için çalıştı:

autocomplete="new-password"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.