Ferahlatıcı sayfası için firefox ve benim php kodu Ctrl + r

4 Cevap php

i bir form oluşturmak var (bu yüzden PHP ve HTML melez-kod). o $ _POST 'gönderme yeteneğine sahiptir. Ve i tıkladığınızda, bu gönderme girişi ve görüntülenmesi ile ilgili mükemmel çalışır.

Ama sayfayı represhing için firefox Ctrl + R tıkladığımda oluyor şey var. "To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier:" Ben bu confim diyaloğu var

benim soru

  1. (bu onaylama diyalog?), ne
  2. ne benim kod yapmak zorunda bu iletişim bastırmak mümkün bunu?

4 Cevap

Muhtemelen bir <form> içeren bir HTML sayfası oluşturduk. Formu (ki, sitenizi barındıran web sunucusu) HTTP sunucuya veri göndermek için kullanılır.

HTTP protokolü sunucuya veri göndermek ve sunucudan veri almak için kullanılan farklı istek türlerini tanımlar. En çok kullanılan GET ve POST vardır. (Eğer korsan tarafında ise, ya neyse) ne yazık ki çok yaygın olan çok kötü bir PHP programcısı, daha fazla bir şey olmak istiyorsanız bu konuda öğrenmek gerekir.

Senin sorunun Firefox bir POST isteği gönderdikten sonra bahsediyoruz sayfada geldi olmasıdır. Eğer reload sayfa varsa, bir POST şeklinde tekrar aynı veri göndermek zorundadır. O onun yapmak istediği konusunda emin dolayı bir POST isteği (genellikle bir veritabanı verileri değiştirmek için) için kullanılması gereken ne sözleşmelere, tarayıcı kullanıcı sorar.

Bunu aşmak için iki seçenek esas vardır:

  1. GET form yöntemini değiştirme; veya
  2. POST sonra bir yönlendirme kullanın.

Ilk yöntemi kullanmak için, sadece form etiketi için bir method="get" parametresini ekleyebilirsiniz:

<form action="senddata.php" method="get"> ... </form>

Ikinci yöntemi kullanmak için, sadece bir şey gibi kullanarak POST isteği sonra kullanıcıyı yönlendirme

header("Location: blahblahblah")

En çok kullanılan model POST-yönlendir, yani, sana bahsettiğim ikinci yöntemdir. (Eğer bu konuda ilgilenen varsa, and you should be, as every PHP programmer should, XSRF hakkında okuyun) many security implications bir veritabanında verileri değiştirmek için GET kullanarak vardır.

(POST isteği gönderen) bir form göndererek yaygın e-ticaret sitelerinde bir sipariş onaylamak için kullanılır. Bu nedenle, iki kez göndererek iki kez, siparişi teslim olacaktır. Bu nedenle tarayıcıları, bir kullanıcı tekrar POST isteği göndermek istediği onay istemek için eğilimindedir.

Bunu önlemek için, size yenileme bir GET isteğini yerine POST isteği yetinmek gerekir. Bunu yapmak için, sadece formu işledikten sonra aynı sayfaya yönlendirme.

header("Location: /path/to/self");

Bu kullanıcı hits yenileme zaman o kadar, bir GET isteğini yerine POST isteği gönderme yapacaktır, ve onay için sormaz.


Clairify için, bu gibi gider:

  • Formu (Form üzerindeki kullanıcı tıklama) POST aracılığıyla gönderilen alır
  • Form işlenmiş olur
  • Kullanıcı (GET) aynı sayfaya yönlendirildi
  • Kullanıcı şimdi bir GET isteği yerine POST isteği ferahlatıcı olacaktır.

Form (php, ASP, statik html vb) form alanı bulu veya diğer ya firefox üzerinden sunucuya gönderilen olabilecek yazılan bilgiler içeren her sanırım, bu sunucuya tekrar veriyi göndermeden önce böyle bir mesaj görüntüler. Mozilla geliştiricileri bir güvenlik koruması olarak hizmet vermektedir. Yapılandırma ama o kadar tavsiye edilmez: Ben bu konuda aracılığıyla devre dışı bırakılabilir sanırım.

Ayrıca normal bir davranıştır. Bu böyle olmalıdır ve ateş oldukça uzun bir süre bu böyle olmuştur.

You may like to have a look here: http://forums.mozillazine.org/viewtopic.php?f=38&t=682835&st=0&sk=t&sd=a&hilit=Firefox+must+send

alternatif olarak veri göndermek için POST yerine GET ...

Selamlar

Form başarıyla teslim olsaydı, status code 303 ile cevap:

header('Location: http://www.example.com/', TRUE, 303);

Bu çıkan sayfada için bir GET isteği kullanmak için tarayıcı zorlar. Bir yeniden herhangi bir veriyi POST ile göndermek olmaz ve hiçbir açılır gösterilir.