miccom
19.12.2009, 00:06:54
Witam.
ja stosuję header, ale jak sobie poradzić ze zmiennymi GET i przyciskiem przeglądarki "przejdź do poprzedniej strony"?
Mój system działa tak:
na stronie etap1.php wykonuję pewne obliczenia, podstawiam zmienne,user wybiera pewne opcje, i metodą GET dane wysyłam do pliku etap2.php.
Tam następuje obróbka, i obrobione zmienne wysyłam do skryptu etap3.php
Tam wykonuję operacje na bazie danych, i przez header przenoszę usera do strony etap.php
I myślałem że jest ok, ale niestety ze strony etap.php można przejść ponownie do strony etap2.php wykorzystując już dane przerobione! klikając przycisk przeglądarki "przejdź do poprzedniej strony"
A ja chciałbym aby po wykonaniu zadań i zapytań do bazy w etap3.php, gość ponownie wykonał zadania i dokonał "wyborów" na stronie etap.php
Jak się zabezpieczyć przed tym? Bo do refresh mam sesje użyte.
Pilsener
19.12.2009, 00:47:58
Kolego, czemu tak komplikujesz sobie życie? Jądrem Twojego systemu powinien być plik index.php umieszczony w folderze głównym, tam trafiają wszystkie zmienne a potrzebne fragmenty kodu po prostu includujesz z innych plików i na tej podstawie generujesz gotową stronę, inaczej zamęczysz się przekazując dane między skryptami.
Możliwe rozwiązania:
1. Modyfikujesz nagłówki http tak, że strona nie jest przechowywana w cache przeglądarki i gdy ktoś kliknie "wstecz" pojawia się komunikat "strona wygasła"
2. Może w Twoim wypadku wystarczy tylko taka modyfikacja, by przeglądarka nie zapamiętywała danych wprowadzonych do formularzy? Poczytaj o tym, było na forum kilka razy.
3. Możesz wykryć użycie przycisku "wstecz" poprzez HTTP_REFERER czy używając JS
4. Zapisujesz informacje o poczynaniach użytkownika i w zależności od tego podejmujesz określoną akcję (metoda najpewniejsza, bo pozostałe może chytry użytkownik obejść). Najprościej wygenerować jakiś token, który powiąże danego użytkownika z formularzem i pozwolić użytkownikowi obrabiać tylko jeden formularz - bo chyba o to Tobie chodzi, że użytkownik może dwa razy wysłać ten sam formularz?
Ogólnie to nie widziałem jak to działa i czemu ma służyć, więc trudno coś bardziej szczegółowo doradzić.