Arama Sonuçları ve Geri Düğmesi / HTML Formları

4 Cevap php

Benim uygulamada form tabanlı arama sonuçları ile sahip yinelenen bir sorun için bir çözüm arıyorum.

Bir kullanıcı bir HTML formunu kullanarak arar ve ben sonraki sayfada veritabanından sonuçlarını görüntülemek Temel olarak, bu mükemmel çalışıyor.

Bir kullanıcı set sonucu bireysel rekor tıklama ve daha sonra tarayıcıda "Geri" tıkladığında Ancak, tarayıcı (Firefox) sorar:

"To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier."

Bir örnek vermek gerekirse, yılda bir DVD koleksiyonu, kullanıcı arama aramak için bir form, bir tek film tıklar. Kullanıcı geri arama sonuçları sayfasına tıkladığında ben kullanıcı yeniden / o form verilerini yeniden zorunda istemiyorum.

Yani herkes bu kurtulmak için nasıl bir fikir var mı?

Seni benim formu göndermek için POST yöntemini kullanıyorum ve sayfayı önbelleğe tarayıcıyı durdurmak için aşağıdaki başlıkları kullanıyorum biraz daha bilgi vermek.

Header('Pragma: no-cache');
Header("Cache-control: private, no-cache, no-store");
Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");.

Sitenin en parola korumalı olduğu gibi, ben şifre korumalı yan önbelleğe istiyorum ve arka girişten sonra gündeme muktedir değilsiniz.

Esasen ne tarayıcı davranış bu tür önlemek için en iyi yoldur ve nedeni nedir? No-cache suçlu? Ben arama sonuçları sayfasında sayfa yükü gelecek birkaç dakika bir Geçerlilik süresi belirtmeniz gerekir?

Ne başka sitelerde bu sorunu görmüyorum bu yaklaşmanın en iyi yoludur. Ben yanlış no-cache bölümü hakkında gidiyorum?

4 Cevap

Kullanıcı "arka" tıkladığında tarayıcı sayfayı yeniden için tekrar veri göndermek gerekiyor çünkü Tarayıcınız bu yapıyor. Bu etrafında bir yolu yerine POST GET isteği kullanmaktır. GET isteği form verilerini gerçek URL kodlanmış / dahildir.

Bir yan not olarak - bir GET veya POST kullanarak olsun, size gereksiz bir veritabanı çağrısı önlemek için sonuçları önbelleğe için oturum kullanmak için ihtiyacınız olup olmadığını düşünmek gerekir.

P.S. GET isteği kullanarak arama sonuçları sayfalarında bookmarkable olacak büyük bir avantaja sahiptir.

Edit: bilgi dahil olmak üzere formlar, POST / GET istekleri ve aralarındaki farkları here bazı iyi bilgi var, bu sorunu giderir desen "Post sonra yönlendir".

Arama bilgi için, POST yerine GET kullanabilirsiniz. Bu URL form verilerini devam. POST veri kullanıcı geri tıkladığında yeniden gönderilecektir gerekir çünkü sorun neden olur.

Bu davranışı engellemek için iki yol vardır.

  1. Change the form's method from POST to GET. This will encode the query in the URL and remove this back button behavior. FWIW, this is what Google does for their search.
  2. Find some way to cache the results of the search (say with session data or Memcache), and redirect them to another page that will access the cached result, using a 302 Redirect header.

PHP ile ilgisi yok.

If you use the back button to go back to any page that performed a POST it will ask to perform that POST again.

The reason that it doesn't happen with GET is that the GET information is in the URL.