Stel dat ik twee pagina’s page1.php
en page2.php
heb en ik wil dat page2.php
alleen wordt weergegeven als dat zo is omgeleid formulier page1.php
en ik heb deze code ingevoegd in page2.php
if($_SERVER['HTTP_REFERER'] == "page1.php")
{
//keep displaying page2.php
}else{
//if it is not redirected from page1.php
header('Location:page1.php')
//redirect the user back to page1.php
}
deze code werkte prima totdat ik een formulier en een verzendknop heb op page2.php
wanneer op de verzendknop wordt geklikt, wordt de pagina vernieuwd, wat betekent dat de HTTP_REFERER
verandert in page2.php
dus mijn if statement
mislukt en het brengt me terug naar page1.php
ik wil niet dat dat gebeurt. Is er een manier om dit te voorkomen?
Bij voorbaat dank.
Antwoord 1, autoriteit 100%
Ik zou het gebruik van HTTP_REFERER
niet aanraden:
-
Het is vrij eenvoudig te manipuleren in de browser.
-
Sommige gebruikers hebben mogelijk beveiligingsinstellingen in hun browser om deze header helemaal niet te verzenden.
-
Het is niet toegankelijk via
HTTPS
. -
Sommige proxy’s verwijderen deze header uit het verzoek
-
Toegevoegd – zie antwoord op deze vraag
Zoals Charlotte Dunois in de opmerking aangaf, kun je beter de sessiewaarde instellen voordat je het formulier verzendt en het vervolgens op pagina 2 controleren.
page1.php:
$_SESSION[ 'display_page2' ] = TRUE;
//rest of the content
page2.php:
if ( (isset( $_SESSION[ 'display_page2' ] ) && $_SESSION[ 'display_page2' ] === TRUE ) || isset( $_POST[ 'some_form_input' ] ) ) {
//keep displaying page2.php
} else {
header('Location:page1.php');
exit;
}
Met isset( $_POST[ 'some_form_input' ] )
kunt u controleren of het formulier is verzonden (via POST-methode).
Wanneer nodig kunt u de sessie uitschakelen met unset( $_SESSION[ 'display_page2' ] );
of door deze op een andere waarde in te stellen.
Antwoord 2, autoriteit 27%
Ik raad het gebruik van $_SERVER['HTTP_REFERER']
af omdat het gemakkelijk kan worden vervalst.
In plaats daarvan zou je een cookiekunnen instellen wanneer ze pagina 1 laden met setcookie("page1", 1);
voordateen opmaak wordt uitgevoerd. Controleer het dan op pagina 2 met
if(isset($_COOKIE['page1']))
{
//keep displaying page2.php
}else{
//if it is not redirected from page1.php
header('Location:page1.php')
//redirect the user back to page1.php
}
Door de vervaldatum niet op te geven, verloopt de cookie wanneer de browser wordt gesloten. In deze situatie zorgt het gebruik van cookies ook voor een veel beter leesbare code voor anderen.
Antwoord 3, autoriteit 18%
<?php
if(($_SERVER['HTTP_REFERER'] == "page1.php") || (isset($_POST['submit']) && $_SERVER['HTTP_REFERER']=="page2.php"))
{
//keep displaying page2.php
}else{
//if it is not redirected from page1.php
header('Location:page1.php');
//redirect the user back to page1.php
}
?>
Als de verwijzer niet pagina 1 is, kunt u de voorwaarde controleren als verwijzer = pagina2 en het bericht is verzonden.
of controleer of de verwijzer pagina 1 is of het bericht is ingediend.
dit is een mogelijkheid om uw probleem te vermijden.
Antwoord 4
<?php
/*
this page allows links from the following pages
public.php?id=links
private.php?id=links
don't allow if visitors come from anywhere else
this example would only work if I used the entire URL in the 'if' statement
*/
$referringpage = $_SERVER['HTTP_REFERER'];
if ( $referringpage == "http://www.example.com/public.php?id=links" ) {
$pass = "yes";
} elseif ( $referringpage == "http://www.example.com/private.php?id=links" ) {
$pass = "yes";
} else {
$pass = "no";
}
if ( $pass == "yes" ) {
// do the function this page was made to do
}
header( "Location: http://www.example.com/public.php?id=links" );
?>