Come implementare la ReturnURL come SO in PHP?
-
22-09-2019 - |
Domanda
Dovrebbe funzionare anche dopo la riscrittura degli URL.
E 'possibile? In caso contrario, posso solo hardcode tutto.
Soluzione
Se si sta tentando di creare un sistema di login con il reindirizzamento è necessario utilizzare l'intestazione HTTP_REFERER per scoprire dove l'utente è venuto da così lo si può mandare indietro lì. Il modo migliore per farlo è, nella vostra login utilizzo forma qualcosa di simile:
//- Login.php
<?php
if ($_POST['username'] && $_POST['password'])
{
//- Run username and password verifying script
header("Location: ".$_POST['returnurl']);
}
$RedirectURL = $_SERVER['HTTP_REFERER'];
?>
<form action="/login.php" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="hidden" name="returnurl" value="<?php echo $RedirectURL; ?>" />
</form>
Si prega di notare che alcuni ISP, browser o proxy metteranno a nudo fuori l'intestazione referer, quindi non si può fare affidamento su di esso per funzionare perfettamente per ogni utente. Se si utilizza un'istruzione if per verificare se esiste o no l'intestazione, è possibile inviare gli utenti tornare alla home page o qualsiasi altra cosa.
Modifica
Se stai cercando di utilizzare $ _SERVER [ 'REQUEST_URI'] dovrebbe essere impostato l'URL bello dopo una riscrittura se si sta eseguendo Apache. Se si sta eseguendo IIS, nel qual caso è necessario verificare la presenza di $ _SERVER [ 'X_HTTP_ORIGINAL_URL']. Qualcosa di simile a questo:
<?php
if (!isset($_SERVER['X_HTTP_ORIGINAL_URL']))
$ReturnURL = $_SERVER['X_HTTP_ORIGINAL_URL'];
else
$ReturnURL = $_SERVER['REQUEST_URI'];
header("Location: /login.php?returnurl=".$ReturnURL);
?>
e
//- Login.php
<?php
if ($_POST['username'] && $_POST['password'])
{
//- Run username and password verifying script
header("Location: ".$_POST['returnurl']);
}
$RedirectURL = isset($_GET['returnurl'] ? $_GET['returnurl'] : "/index.php";
?>
<form action="/login.php" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="hidden" name="returnurl" value="<?php echo $RedirectURL; ?>" />
</form>