php - usuario - redireccionar html
Redirigir a la página anterior después de iniciar sesión? PHP (17)
He estado buscando una solución, pero parece que no puedo hacerlo bien, sin importar lo que intento.
Después de iniciar sesión correctamente, el usuario debe ser redireccionado a la página de donde vino, digamos que ha estado navegando por una publicación y quiere iniciar sesión para poder dejar un comentario, por lo que debe ser redireccionado a la publicación que estaba navegando. Entonces aquí está lo que tengo:
login.php muestra el formulario de inicio de sesión:
<form method="post" action="login-check.php">
... //input for username and password
</form>
El login-check.php comprueba si se ingresaron el nombre de usuario y el pase, si el usuario existe, o si ya ha iniciado sesión, y un parámetro ap se envía a login.php:
<?php
session_start();
if((empty($username) OR empty($password) AND !isset($_SESSION[''id_login'']))) {
header("Location:login.php?p=1");
exit();
}
elseif (!user_exists($username,$password) AND !isset($_SESSION[''id_login''])) {
header("Location:login.php?p=2");
exit();
}
elseif(isset($_SESSION[''id_login''])) {
header("Location:login.php?p=3");
exit();
}
?>
p se envía de vuelta a login.php y muestra el mensaje de acuerdo:
<?php
if(isset($_GET[''p''])) {
$p = $_GET["p"];
if($p=="1")
echo "<p class=/"red/">You didn''t fill the form.</p><br></br>";
if($p=="2")
echo "<p class=/"red/">User exists.</p><br></br>";
if($p=="3")
header("Location: index.php");
}
?>
PERO, en lugar de ir a index.php después del inicio de sesión exitoso, debe ir a la página que el usuario ha estado anteriormente. Lo intenté de diferentes maneras pero éter no funciona para nada o vuelve a login.php. No es necesario que sea súper seguro, porque estoy haciendo esto para un proyecto escolar.
TAMBIÉN, me considero bastante novato, así que tenga paciencia: D
Como la página de inicio de sesión es una página separada, supongo que desea redireccionar a la página desde la que el usuario llegó a la página de inicio de sesión.
$_SERVER[''REQUEST_URI'']
simplemente mantendrá la página actual. Lo que quiere hacer es usar $_SERVER[''HTTP_REFERER'']
Así que guarde el HTTP_REFERER en un elemento oculto en su formulario <input type="hidden" name="referer" value="<?= $_SERVER[''HTTP_REFERER''] ?>" />
Pero tenga en cuenta que en el PHP que procesa el formulario, necesitará alguna lógica que redirija a la página de inicio de sesión si el inicio de sesión falla, pero también para verificar que el referer sea en realidad su sitio web, de lo contrario, redirija a la página de inicio.
Construya la acción de forma tal que "recuerde" o persista en la página anterior escribiendo un returnurl=value
clave / valor returnurl=value
query string en la URL; esto se puede pasar desde cualquier página que redirija al inicio de sesión.
Creo que es posible que necesite $ _SERVER [''REQUEST_URI''];
if(isset($_SESSION[''id_login''])) {
header("Location:" . $_SERVER[''REQUEST_URI'']);
}
Eso debería tomar la url en la que se encuentran y redirigirlos después de un inicio de sesión exitoso.
Cuando el usuario llega a la página de inicio de sesión, use esto para ver de dónde viene
$_SERVER[''HTTP_REFERER'']
Luego, establezca este valor en la sesión y, cuando se autentique, use la url de la sesión para redirigirlo. Pero debe hacer algunas comprobaciones antes, si la url es su sitio. Tal vez él venga de otro sitio directamente para iniciar sesión :)
Debería probar algo como $_SERVER[''HTTP_REFERER'']
.
La respuesta de @ philipobenito funcionó mejor para mí.
Primero creé una entrada oculta que contiene el referer HTTP del usuario
<input type="hidden" name="referer" value="<?= $_SERVER[''HTTP_REFERER''] ?>" />
y después de un inicio de sesión exitoso, redirigí a los usuarios a cualquier valor almacenado en esa entrada oculta
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
if(!empty($_POST[''referer''])){
header(''Location: ''.$_POST[''referer'']);
}
else{
header(''Location: members.php''); //members.php is a page used to send a user to their profile page.
}
exit;
Otra forma, usando SESSION
Asigna la URL actual a la sesión (úsala en cada página)
$_SESSION[''rdrurl''] = $_SERVER[''REQUEST_URI''];
y en su página de inicio de sesión, use
if(isset($_SESSION[''rdrurl'']))
header(''location: ''.$_SESSION[''rdrurl'']);
else
header(''location: http://example.com'');
Primero debe obtener la página de referencia del usuario en una variable usando $ _SERVER [''HTTP_REFERER'']; en tu página de inicio de sesión.
ME GUSTA:
<?php
session_start();
$refPage = $_SERVER[''HTTP_REFERER''];
?>
Y ahora, cuando el usuario haga clic en Iniciar sesión, cambie la ubicación del encabezado a la página de referencia del usuario
ME GUSTA:
<?php
if(isset($_POST[login])){
session_start();
header(''location:'' . $refPage);
}
?>
Y en este momento primero debe verificar que el usuario refiera la página vacía o no porque su usuario puede visitar directamente su página de inicio de sesión, entonces su variable $ refPage estará vacía así que después de la página Click to Login permanece aquí
ME GUSTA:
<?php
if(isset($_POST[login])){
session_start();
$refPage = $_SERVER[''HTTP_REFERER'']; // get reffer page url
if(empty($refPage)){
header(''location: yourredirectpage''); // if ref page is empty then set default redirect page.
}else{
header(''location:'' . $refPage); // or if ref page in not empty then redirect page to reffer page
}
}
?>
O puede usar el tipo de entrada oculto donde puede establecer el valor $ _SERVER [''HTTP_REFERER''];
ME GUSTA:
<input type="hidden" name="refPage" value="<?php echo $_SERVER[''HTTP_REFERER'']; ?>">
Y cuando un usuario hace clic en Iniciar sesión, puede obtener el valor de refPage y redirigir la página anterior. Y también debe verificar la página de referencia vacía. Debido a que su usuario puede visitar, dirija su página de inicio de sesión.
Gracias.
Probablemente deberías colocar la url para redirigir a una variable POST.
Puede guardar una página usando php, así:
$_SESSION[''current_page''] = $_SERVER[''REQUEST_URI'']
Y regrese a la página con:
header("Location: ". $_SESSION[''current_page''])
Puede usar la sesión para almacenar la página actual en la que desea regresar después del inicio de sesión y eso funcionará para otras páginas si mantiene la sesión correctamente. Es una técnica muy útil ya que puedes desarrollar tu rastro de pan usando.
Una forma común de hacerlo es pasar la página actual del usuario al formulario de inicio de sesión a través de una variable $_GET
.
Por ejemplo: si está leyendo un artículo, y quiere dejar un comentario. La URL para comentarios es comment.php?articleid=17
. Mientras se carga comment.php
, se da cuenta de que no ha iniciado sesión. Quiere enviarlo a login.php
, como mostró anteriormente. Sin embargo, vamos a cambiar su script para que también le indique a la página de inicio de sesión dónde está:
header("Location:login.php?location=" . urlencode($_SERVER[''REQUEST_URI'']));
// Note: $_SERVER[''REQUEST_URI''] is your current page
Esto debería enviar al usuario a: login.php?location=comment.php%3Farticleid%3D17
. login.php
ahora debería verificar si $_GET[''location'']
está $_GET[''location'']
. Si está lleno, envíe al usuario a esta ubicación (en este caso, comment.php?articleid=17
). Por ejemplo:
// login.php
echo ''<input type="hidden" name="location" value="'';
if(isset($_GET[''location''])) {
echo htmlspecialchars($_GET[''location'']);
}
echo ''" />'';
// Will show something like this:
// <input type="hidden" name="location" value="comment.php?articleid=17" />
// login-check.php
session_start();
// our url is now stored as $_POST[''location''] (posted from login.php). If it''s blank, let''s ignore it. Otherwise, let''s do something with it.
$redirect = NULL;
if($_POST[''location''] != '''') {
$redirect = $_POST[''location''];
}
if((empty($username) OR empty($password) AND !isset($_SESSION[''id_login'']))) {
$url = ''login.php?p=1'';
// if we have a redirect URL, pass it back to login.php so we don''t forget it
if(isset($redirect)) {
$url .= ''&location='' . urlencode($redirect);
}
header("Location: " . $url);
exit();
}
elseif (!user_exists($username,$password) AND !isset($_SESSION[''id_login''])) {
$url = ''login.php?p=2'';
if(isset($redirect)) {
$url .= ''&location='' . urlencode($redirect);
}
header("Location:" . $url);
exit();
}
elseif(isset($_SESSION[''id_login''])) {
// if login is successful and there is a redirect address, send the user directly there
if($redirect)) {
header("Location:". $redirect);
} else {
header("Location:login.php?p=3");
}
exit();
}
Gotchas
Debe ejecutar una validación contra $_GET[''location'']
antes de enviar al usuario allí. Por ejemplo, si le digo a las personas que usan su sitio que login.php?location=http%3A%2F%2Fmalice.com%2Fevilpage.php
clic en este enlace: login.php?location=http%3A%2F%2Fmalice.com%2Fevilpage.php
... luego se enviarán a una URL extranjera que lo hará intenta hacer algo malo
Siempre asegúrese de usar urlencode
al pasar las URL como parámetros $_GET
. Esto codifica caracteres especiales de URL (como ?
&
Y %
) para que no rompan tu URL (por ejemplo: login.php?location=comment.php?id=17
<- esto tiene dos ?
S y lo hará no funciona correctamente)
Use entrada oculta en su página de inicio de sesión. Me gusta:
<input name="location" value="<?php if(!empty($_SERVER[''HTTP_REFERER''])) echo $_SERVER[''HTTP_REFERER'']; else echo ''products.php''; ?>" type="text" style="display: none;" />
que tal esto :: javascript + php
echo "<script language=javascript> javascript:history.back();</script>";
funcionará igual que el botón anterior en su navegador
usar algo como
$_SERVER[''HTTP_REFERER''];
Y si es un inicio de sesión exitoso, muestre un enlace que diga "Haga clic aquí para volver" y un enlace a la referencia, y cuando la página se cargue, use algunos javascript para cargar automáticamente esa página (no use back () ni lo que sea La función es que no volverá a cargar la página y parecerá que el usuario nunca ha iniciado sesión.
$_SESSION[''current_page''] = $_SERVER[''REQUEST_URI'']
Y regrese a la página con:
header("Location: ". $_SESSION[''current_page''])
Este código funciona
if(isset($_SESSION[''id_login''])) {
header("Location:" . $_SERVER[''REQUEST_URI'']);
}
Usé este código y funciona. Muchas gracias.