Avatar billede AnyFellow Mester
09. oktober 2014 - 09:43 Der er 13 kommentarer og
1 løsning

Problemer med redirect med header()

Jeg har en kæmpe log der vises i en tabel. Jeg har lavet en form, hvor brugeren kan filtrere i loggen.

Det er lavet således:
1. Brugeren vælger f.eks. en datorange og trykker på "Filtrer".
2. Knappen "Filtrer" er en submit-knap i en form.
3. Siden registrerer filtervalget og redirecter til sig selv med php's header().

Valget med at redirecte er truffet for at browseren ikke komme og vil gensende data til formularen, hvis brugeren opdaterer skærmbilledet i browseren.

Mit problem er at der tilsyneladende sker en eller anden form for caching, idet filter-valgter først virker efter 20-30 sekunder. Jeg skal i hvertfald trykke opdater en hel del gange før det pludselig virker. Fjerner jeg redireceten virker det som det skal, med undtagelse af det med at gensende data.

Jeg har prøvet at sætte headers ind, der skulle fjerne caching, men det gør ikke nogen forskel.

function redirect($referer) {
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
    header("Location:$referer");
    exit;
}

Nogen med et bud på hvad jeg kan forsøge, eller en alternativ måde at undgå at browseren vil gensende data ved opdater?
Avatar billede repox Seniormester
09. oktober 2014 - 10:04 #1
Kan du prøve at debugge det ved at medsende en random genereret GET parameter med til den side du redirecter til og se om det gør nogen forskel? Det er blot for at sikre det er et konkret cache problem.
Avatar billede AnyFellow Mester
09. oktober 2014 - 10:08 #2
Har prøvet at sætte en random parameter i min URL, og det løser problemet, så det må være et cache problem.
Avatar billede repox Seniormester
09. oktober 2014 - 10:10 #3
Hvordan er din form bygget op?
Avatar billede AnyFellow Mester
09. oktober 2014 - 10:21 #4
I en lidt forsimplet udgave:

<form name="log" action="log.php?show=open_log&id=6" method="post">
  <table>
    <tr>
      <td><input type="submit" name="search" value="Søg"> <input type="submit" name="reset_filter" value="Nulstil filter"></td>
      <td>Side <input type="submit" name="page_back" value="<-"> <input size="2" type="text" name="page" value="1"> <input type="submit" name="page_forward" value="->"> ud af 2 sider | 39 logs fundet</td>
    </tr>
  </table>

  <table>
    <tr>
      <th>Bruger</th>
      <th>Type</th>
    </tr>
    <tr>
      <td><input type="text" name="user" value=""></td>
      <td><input type="text" name="type" value=""></td>
    </tr>
    <tr >
      <td valign="top">kfisker</td>
      <td valign="top">login</td>
    </tr>
  </table>
</form>
Avatar billede repox Seniormester
09. oktober 2014 - 10:32 #5
Og hvad redirecter du til?
Avatar billede AnyFellow Mester
09. oktober 2014 - 10:34 #6
Jeg redirecter til: log.php?show=open_log&id=6
Avatar billede AnyFellow Mester
09. oktober 2014 - 11:31 #7
Jeg har prøvet at lægge en side ind imellem, men caching-problemet er der stadig.
Avatar billede AnyFellow Mester
09. oktober 2014 - 11:45 #8
log.php er bygget således op (pseudo):


if (!empty($_POST)) {
  $_SESSION['post']['var1'] = $_POST['var1'];
  $referer = "log.php?show=open_log&id=6";
  header("Location:$referer");
}

if (isset($_SESSION['post']['var1'])) {
  // Select fra DB med filter
} else {
  // Select fra DB uden filter
}

Hent data fra DB
echo form + tabel med data
Avatar billede repox Seniormester
09. oktober 2014 - 12:24 #9
Jeg tror problemet er de der get parametre.
Har du overvejet at bruge sessions i stedet?
Avatar billede AnyFellow Mester
09. oktober 2014 - 12:41 #10
Jeg har lavet en test, hvor get-parametrene er fjernet. Det gør ingen forskel.
Avatar billede repox Seniormester
09. oktober 2014 - 13:02 #11
Er du på noget XAMP, MAMP, WAMP eller lignende? Eller er dette på et produktionssetup hvor dette er et problem?
Avatar billede AnyFellow Mester
09. oktober 2014 - 13:14 #12
Det er på et webhotel hos meebox.
Avatar billede AnyFellow Mester
09. oktober 2014 - 13:31 #13
Har kigget i webhotelles konfiguration og disablet Varnish cache. Det løste problemet.

Læg et svar og der er point på vej for din deltagelse i tråden :)
Avatar billede AnyFellow Mester
24. oktober 2014 - 08:19 #14
Lukker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester