Witam
W jaki sposób zabezpieczyć się przed odświeżeniem witryny klawiszem F5 ?
Witam
W jaki sposób zabezpieczyć się przed odświeżeniem witryny klawiszem F5 ?
No way. Nie da się.
A co zlego w odswiezeniu? Czego chcesz uniknac?
guest123 napisał(a)
Nie da się.
Da się, ale pod warunkiem, że ta strona już nie będzie istnieć ;)
Generujesz token i wysyłasz go przeglądarce, która wchodzi na stronę wyglądającą np. tak: plik.php?token=523453454353 gdzie ta duża liczba, to specjalnie wygenerowany kod dla sesji przechowujący informację o stronie, która ma się wyświetlić. Skrypt powinien być wykonany tak aby po zczytaniu owej zmiennej usuwał wszytkie informacje o niej.
To na 100% zadziała. Pytanie tylko dlaczego nie chcesz aby odświeżali Twoją stronę :>
Dlatego, że w bazie danych główne pole ID jest ustawione na AutoIncrement czy jak to woli Identity (MSSQL), a w kodzie PHP zaś jest ustawiona transakcja mssql_query("BEGIN TRANSACTION"); i w momencie kiedy user nie zatwierdzi zmian (COMMIT) buttonem, baza w transac.log (dziennik transakcji) pamieta numer ID, który się zwiększa przez choćby odświeżanie strony, bo wykonuje sie ponownie kod.....
W takim razie albo użyjesz coś w stylu tego co napisałem w poprzednim poście, albo zastąpisz autoincrement rezerwowaniem pola w tabeli i przekażesz numer tego pola przeglądarce - wtedy nie bedziesz mógł wykonać zapytania insert ponownie na tym samym id, albo po prostu sprawdzisz, czy podobny rekord nie jest już w tabeli.
Owszem , zgadza się gdybym miał taką możliwość to już dawno bym to zrobił, wywalił autoincrement, ale nie moge tego zrobić bo baza danych jest firmowa, posypały by się dane, dokumenty itd...
W takim razie albo stosujesz jednorazowy token we właściwości action formularza albo sprawdzasz czy podobne dane zostały już umieszczone w bazie.
Ewentualnie możesz skorzystać też z technologii AJAX. Wtedy przy odświeżeniu strony dane nie zostaną przesłane. Blokowanie odświeżania samego w sobie IMO nie ma sensu, bo za dużo rzeczy trzeba przewidywać. Weź pod uwagę, że nie tylko odświeżanie jest tu problemem, bo wystarczy, że użytkownik użyje guzika WSTECZ.