2012-03-22 11 views
6

Po przesłaniu formularza mam 2 zmienne $ _POST. Na stronie docelowej chcę przekształcić je w zmienne $ _SESSION i anulować ustawienia $ _POST, aby użytkownik nie otrzymywał alertu przeglądarki, aby ponownie wysłać dane. To jest mój (nie działa) Kod:

if(isset($_POST['clave']) && isset($_POST['email'])){ 
    $_SESSION['id_user']=$_POST['clave']; 
    $_SESSION['email']=$_POST['email']; 
} 
if(isset($_SESSION['id_user']) && isset($_SESSION['email'])){ 
    unset($_POST['clave']); 
    unset($_POST['email']); 
    //I do my stuff here 
} 

Gdybym echo posty nic nie pokaże, ale za każdym razem przeładować otrzymuję ostrzeżenie ponownie przeglądarkę.

+1

Co to jest * rzeczy *, które robisz? –

Odpowiedz

8

Nie można po prostu usunąć danych $ _POST z serwera. Przeglądarka ostrzega, ponieważ jest przechowywana przez przeglądarkę pod numerem. Jeśli ponownie prześle dane, wyśle ​​je z powrotem na serwer i ponownie zasiedli$_POST.

To, co musisz zrobić, to użyć wzoru POST-REDIRECT-GET.

Przetwarzanie danych POST (np. Przez zrzucenie ich do sesji), a następnie wysłanie do przeglądarki przekierowania , a nie dokumentu HTML. Przeglądarka wysyła następnie żądanie GET do serwera, a następnie podaje mu stronę.

+0

Dziękuję. Wszystkie inne odpowiedzi były słuszne, ale ta daje mi rozwiązanie, które mogę wykorzystać do rozwiązania mojego problemu. Twoje zdrowie! –

4

To niemożliwe. Kiedy użytkownik przeładowuje, akcja PREVIOUS jest przerobiona, co było postem. Nawet jeśli wyzerowałeś wartości POST, kiedy formularz został po raz pierwszy przesłany, akcja przeładowania będzie całkowicie NOWYM żądaniem. Przeglądarka ZAWSZE zapyta użytkownika, czy chciałby ponownie przesłać dane.

Aby temu zapobiec, należy przekierować użytkownika na inną stronę PO utworzeniu postu.

np.

  1. użytkownik GETs formularz.
  2. postów użytkownika na formę
  3. serwer przekierowuje użytkownika do nowej strony
  4. użytkownik otrzymuje nową stronę
  5. hity użytkowników przeładować
  6. użytkownik otrzymuje nową stronę ponownie - brak POST jest wykonywane.
2

To nie zadziała, ponieważ przeglądarka nie ostrzega o stronie serwera, prosi o potwierdzenie, że powinna wykonać niebezpieczne działanie.

W większości przypadków powinieneś używać urządzenia POST/Redirect/GET pattern, które nie cierpi z powodu tego problemu.

1

Jego stary post, ale także w obliczu tego samego problemu, więc o łatwe rozwiązanie,

  1. stworzyć login.php ==> dodaj dwie zmienne, które za pośrednictwem formularza html

  2. utwórz getHome.php ==>, który otrzyma dwie zmienne za pomocą $ _POST ['myvar']; funkcja i umieść te dwie zaksięgowane zmienne w sesji, również echo złego użytkownika n tutaj, jeśli chcesz.

  3. utwórz home.php ==> tutaj ustawisz warunek if dla sprawdzania sesji tj. If (isset ($ _ SESSION ['myvar'])) {display home} else {header ('location: login. php "); * Funkcja nagłówka przekieruje Cię do logowania.php iif możesz pobrać plik home.php bezpośrednio, bez zalogowania.

gotowe!

Powiązane problemy