Como implementar o retorno como assim no PHP?
-
22-09-2019 - |
Pergunta
Também deve funcionar após a reescrita do URL.
É possível? Caso contrário, só posso codificar tudo.
Solução
Se você estiver tentando criar um sistema de login com redirecionamento, precisará usar o cabeçalho HTTP_Referer para descobrir de onde o usuário veio para que você possa enviá -lo de volta para lá. A melhor maneira de fazer isso é que, no seu formulário de login, use algo assim:
//- 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>
Observe que alguns ISPs, navegadores ou proxies retirarão o cabeçalho do referente, para que você não possa confiar nele para funcionar perfeitamente para todos os usuários. Se você usar uma instrução IF para verificar se o cabeçalho existe ou não, poderá enviar esses usuários de volta à página inicial ou qualquer outra coisa.
EDITAR
Se você deseja usar $ _server ['request_uri'], ele deve ser definido como o URL bonito após uma reescrita se você estiver executando o Apache. Se você está executando o IIS, nesse caso, você precisa verificar $ _server ['x_http_original_url']. Algo assim:
<?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>