Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: repost? czy jakos tak..
Forum PHP.pl > Forum > PHP
budzyk
w jaki sposob moge zabezpieczyc moj skrypt przed wielokrotnym jednoczesnym wywolaniem go, chodzi mi np. o sytuacje kiedy uzytkownik pare razy kliknie na dany link, czy button, zanim załaduje sie nastepna strona, albo po wykonaniu skryptu odświeży strone i jeszcze raz przesle do niej dane przekazane przez POST. ktos kiedys mowil mi o czyms takim, jak TICKETY, ale nie nigdzie nie moge znalesc o tym informacji. pozdrawiam.
Pigula
chyba tokeny winksmiley.jpg Link do podobnego watku biggrin.gif
legorek
No coz miałem kiedys taki problem z forum. Zrobiłem to W JS. Po klikniecu przycisku robi się nieaktywny.
NuLL
W IPB czyli u Nas na forum jest podobnie - choćby podczas wysyłania PW.
budzyk
na JS kompletnie sie nie znam, jak mogli byscie jakis skrypt czy cuś..
NuLL
Wyciągnij go sobie z IPB.
FiDO
Jesli chodzi o rozwiazanie po stronie JS to w zeszlym tygodniu zrobilem sobie funkcyjke, ktora wystarczy wywolac na stronie i sama przelatuje przez wszystkie formularze i powoduje, ze wcisniecie submita czyni go nieaktywnym:

Kod
function disableSubmits() {
    for (var i = 0; i < document.forms.length; i++) {
        var frm = document.forms[i];
        for (var i = 0; i < frm.elements.length; i++)  {
            if (frm.elements[i].type == "submit") {
                frm.elements[i].onclick = function() {
                    this.disabled = true;
                    // przycisk deaktywowany nie przesyla POST'em swojej nazwy, wiec wypadalo by ja dodac
                    var sb = document.createElement('input');
                    sb.type = 'hidden';
                    sb.name = this.name;
                    sb.value= 1;
                    this.form.appendChild(sb);
                    this.form.submit();
                }
            }
        }
    }
}

Nie wymaga to praktycznie zadnych zmian na stronie. Dolaczac tylko ta funkcje i wywolujesz ja w onload albo na koncu strony.

Jednak dodatkowo polecam zabezpieczenie po stronie serwera, bo nie kazdy ma JS, pozatym zdarzaja sie zlosliwi smile.gif
Najprosciej (chyba) zrobic to tak, ze w sesji zapisujesz czas ostatniego wywolania POST'a, ale wczesniej porownujesz wczesniej zapisany czas z aktualnym.. jesli nie minelo wiecej niz np. 5 sekund to robisz exit.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.