Omedelbar omdirigering i PHP
En omdirigering som utförs med funktionen
header sker inte i det ögonblick
denna funktion anropas. Det beror på att PHP självt
inte utför omdirigeringen, utan skickar bara
motsvarande HTTP-huvud till webbläsaren.
Det betyder att omdirigeringen bara kommer att ske när PHP har kört hela skriptet till slutet. På grund av detta kan olika parasitära effekter uppstå.
Till exempel, i följande kod vill vi antingen utföra en omdirigering eller en databasförfrågan. Men databasförfrågan kommer att utföras även om det fanns en kommando för omdirigering:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // kommer att utföras även vid omdirigering!
?>
För att undvika sådana problem behöver du
efter omdirigeringen omedelbart anropa funktionen
die, som omedelbart avslutar
skriptkörningen och omdirigeringen sker
omedelbart:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Återskapa någon parasitisk
effekt i din kod. Åtgärda sedan
den med funktionen die.