Tovább a tartalomhoz

Duplikált beküldések és a megelőzésük

Miért keletkezhet kétszer egy beküldés, milyen védelmi rétegek vannak a Gravity Formsban, és mit ellenőrizz, ha mégis duplikált bejegyzéseket látsz.

Néha úgy tűnik, hogy az űrlap többször lett beküldve, pedig a látogató csak egyszer kattintott a küldés gombra. A Gravity Forms több védelmi réteget használ, az ok szerint. Három eset fordul elő: az oldal újratöltése vagy egy böngészőlap visszaállítása a sikeres beküldés után, többszörös kattintás, amíg az űrlap még feldolgozás alatt van, és ugyanannak az egyedi értéknek az ismételt beküldése.

Böngészős újraküldés az oldal újratöltésekor. Beküldéskor a böngésző POST-kéréssel küldi el az űrlapadatokat az oldalnak. Ha a látogató a visszaigazoló képernyőn marad, majd frissíti az oldalt, vagy később visszatér a lapra és újratölti a böngészőt, ugyanaz a kérés újra elmehet. Ez a böngészőtől függően figyelmeztetéssel vagy anélkül történhet.

Többszörös kattintás lassú beküldés közben. Ha a beküldés lassú a fizetés, fájlfeltöltés vagy CAPTCHA-ellenőrzés miatt, a látogató a várakozás közben többször is kattinthat a Küldés vagy a Tovább gombra. Minden kattintás újabb beküldést indíthat, ha az űrlap nem blokkolja vagy nem hagyja figyelmen kívül a további próbálkozásokat.

Ismételt beküldés ugyanazzal az értékkel. A látogató újra beküldi ugyanazt az e-mail-címet, felhasználónevet vagy azonosítót. Ez adatduplikáció, nem böngésző- vagy dupla kattintás okozta probléma, és külön, az Ismétlődések tiltása mezőbeállítással kezelhető.

A Gravity Forms három, egymástól független mechanizmussal véd a duplikátumok ellen.

Miután a kiszolgáló elmentette a beküldést és megjelenítette a visszaigazolást, a Gravity Forms egy kis szkriptet futtat a háttérben. A szkript úgy módosítja a böngésző címsorát, hogy az oldal egyszerű frissítése oldalbetöltésnek számítson, ne az űrlap újraküldésének. Ez a védelem automatikusan működik, és alapból be van kapcsolva.

A szkript csak sikeres beküldés után fut. Sikertelen ellenőrzés vagy megszakadt beküldés nem indítja el.

A Safari (az iPhone-on és iPaden is) másként kezeli az előzményeket és az újratöltést, mint a Chrome és a Firefox, ezért a Gravity Forms kissé eltérően jár el. Sikeres beküldés után a Safari címsorába lekérdezési paraméter kerül:

?gf_protect_submission=1

Ez a visszaigazoló webcímet már beküldöttnek jelöli. Ha a Safari úgy próbálja újratölteni az oldalt, hogy az az űrlapot újraküldené, a Gravity Forms a kiszolgálón elfogja a kérést, és a látogatót visszairányítja az űrlap oldalára a paraméter nélkül. Így normál oldalbetöltést kap, nem duplikált beküldést.

Előfordulhat, hogy a Safariban a beküldés után röviden megjelenik a ?gf_protect_submission=1 a címsorban. Ez a várt működés, nem hiba.

Többszörös kattintás feldolgozás közben

Szekció neve “Többszörös kattintás feldolgozás közben”

Ez külön van kezelve az újratöltés elleni védelemtől. Amikor a látogató a Küldés vagy a Tovább gombra kattint, a Gravity Forms azonnal beküldöttnek tekinti az űrlapot, így a lassú kérés közbeni további kattintások nem indítanak újabb teljes beküldést.

Az AJAX-os űrlapoknál a beküldés végig ugyanazon az oldalon marad, és a kiszolgáló válaszakor a visszaigazolás váltja fel az űrlapot, ami tovább csökkenti a frissítés okozta duplikátumok esélyét.

Az Ismétlődések tiltása mezőbeállítás

Szekció neve “Az Ismétlődések tiltása mezőbeállítás”

Ha egy mezőnek, például egy e-mail-címnek vagy regisztrációs azonosítónak az összes beküldés között csak egyszer szabad szerepelnie, kapcsold be az Ismétlődések tiltása beállítást az űrlapszerkesztőben, a mező Általános beállításai között, a Szabályok alatt.

https://minta-bolt.hu/wp-admin/admin.php?page=gf_edit_forms&id=1
Az E-mail-cím mező beállításai az űrlapszerkesztőben, az Általános szakaszban a Kötelező és az Ismétlődések tiltása jelölőnégyzettel

A képen az Általános szakasz Szabályok csoportjában az Ismétlődések tiltása jelölőnégyzet látszik, a Kötelező alatt.

Beküldéskor a Gravity Forms megnézi a meglévő beküldéseket erre az értékre. Ha talál egyezést, az ellenőrzés sikertelen, és hibaüzenet jelenik meg a látogatónak. Ez az ellenőrzés a kiszolgálón fut, független az újratöltés elleni védelemtől és a többszörös kattintás kezelésétől.

Ahol az átirányítás megoldható, használj átirányítás típusú visszaigazolást: ha a látogatót beküldés után új webcímre küldöd, a legtöbb újratöltés okozta duplikátum eleve elkerülhető. Kerüld az agresszív gyorsítótárazást az űrlapot vagy visszaigazolást tartalmazó oldalakon. Kapcsold be az Ismétlődések tiltása beállítást minden olyan mezőnél, amelynek egyedinek kell lennie (például e-mail-cím, felhasználóazonosító vagy hivatkozási szám): a rendszer a meglévő beküldésekkel veti össze az értéket, és ugyanazzal az értékkel nem engedi újra beküldeni az űrlapot. Időnként nézd át a beküldéseket duplikátumok után, és szűrd őket a beküldések listáján. Ha lehet, kérd meg a látogatókat, hogy a pörgő jelző vagy a visszaigazolás megjelenéséig ne kattintsanak újra.

Tünet Mit ellenőrizz
Duplikált beküldés a visszaigazoló oldal frissítése után Üzenet típusú visszaigazolás gyorsítótárazott oldalon: válts átirányítás típusú visszaigazolásra, vagy kapcsold ki a gyorsítótárat arra az oldalra.
A Safariban megjelenik a ?gf_protect_submission=1 a webcímben Ez a Safari duplikáció elleni védelme: az újratöltés normál oldalt ad, újabb beküldés nélkül.
Duplikált beküldés gyors kattintgatástól Keress JavaScript-hibát az oldalon, ellenőrizd, hogy az AJAX-os beküldés be van-e kapcsolva, és hogy nincs-e egyedi küldés gomb vagy olyan bővítmény, amely lecseréli az alapértelmezett gombot.
Ugyanaz az e-mail-cím vagy azonosító többször is bekerül Kapcsold be az Ismétlődések tiltása beállítást az érintett mezőnél, vagy gondold át, hogy az ismételt beküldések engedélyezettek-e.

A duplikált beküldések elleni védelmet a GF_Duplicate_Submissions_Handler osztály kezeli (includes/duplicate-submissions.php).

A védelem csak azokra a kérésekre vonatkozik, amelyek tartalmazzák a gform_submit POST-mezőt. Sikeres beküldésnél, vagyis ha van beküldésazonosító, a PHP betölti a js/duplicate-submissions.js szkriptet, és átad neki egy jelzőt, hogy a beküldés érvényes volt. Ha az ellenőrzés sikertelen volt, vagy a beküldés megszakadt, a szkript nem csinál semmit.

A szkript a history.replaceState hívással módosítja a böngésző címsorát, hogy a következő frissítés normál oldalbetöltésnek számítson, ne POST-újraküldésnek. A Safariban tiszta webcím helyett a ?gf_protect_submission=1 paramétert állítja be. Ha a Safari ezután úgy lép erre a webcímre, hogy az újraküldené az űrlapot, a maybe_handle_safari_redirect az oldalbetöltés elején elfogja, és 303-as átirányítással visszaküldi az űrlap oldalára a paraméter nélkül.

A védelmet globálisan vagy űrlaponként a gform_is_disabled_duplicate_submissions_protection szűrővel kapcsolhatod ki.

Az AJAX-os beküldésről az AJAX-os beküldés fejezet szól, a visszaigazolások típusairól a Visszaigazolások beállításai fejezet.

Készült:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások