Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: header i nieprawidłowe przekierowanie
Forum PHP.pl > Forum > Przedszkole
lalas
witajcie
chcialbym zastosowac zabezpieczenie na stronie przed ponownym odswiezeniem i ponownym wykonaniu skryptu za pomoca naglowka
  1. <?php
  2. if (count($_GET)) 
  3. {
  4. // REDIRECT
  5. $a = array(
  6. 'post' => $_POST,
  7. 'get' => $_GET,
  8. );
  9.  
  10. // Ustalamy flashkey
  11. $key = 'postredirect' . rand(); 
  12. $_SESSION[$key] = $a;
  13.  
  14. // Przekierowanie
  15. header("Location: ".$_SERVER['PHP_SELF']."?flashkey=$key");
  16. } else if (isset($_GET['flashkey']) 
  17. && isset($_SESSION[$_GET['flashkey']])) {
  18. // POWROT
  19.  
  20. $key = $_GET['flashkey'];
  21.  
  22. // Odtwarzamy parametry
  23. $a = $_SESSION[$key];
  24. $_POST = $a['post'];
  25. $_GET = $a['get']; 
  26. // Albo merge, jesli przesylamy inne parametry GET-em
  27.  
  28. // Klucz w sesji już niepotrzebny
  29. unset($_SESSION[$key]);
  30. }
  31. ?>


a przegladarka wywala mi:

Nieprawidłowe przekierowanie
Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie.
Problem ten może się pojawić w wyniku zablokowania lub odrzucenia ciasteczek.

jak to ugryzc?
nospor
chodzi oto, ze ciagle skrypt zapetlasz. Robisz przekierowanie, a te przekierowanie robi kolejne przekierowanie i tak bez konca.

Przeciez if (count($_GET)) bedzie zawsze prawdziwy, bo w przekierowaniu masz
header("Location: ".$_SERVER['PHP_SELF']."?flashkey=$key");
czyli count($_GET) zawierac bedzie 1
lalas
http://nexoft.pl/wiki/index.php?title=Redirect_After_POST
przyklad z gory ;p
czyli wychodzi na to ze trzeba zastosowac tylko
  1. <?php
  2. if (count($_GET)) {
  3. header("Location: ".$_SERVER['PHP_SELF']);
  4. }
  5. ?>


z kolumny "rozwiazanie" - mam nadzieje ze zadziala, dzieki za uwage - jednak czasem trzeba sprawdzac co kto umieszcza na stronie
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.