2012-04-22 23 views
6

Tengo dificultades para configurar una redirección después de iniciar sesión con éxito por el usuario.Enviando usuario de nuevo a la página de referencia

La página de inicio de sesión debe redirigir al usuario a la página donde se les negó el acceso después de que hayan iniciado sesión correctamente.

Por ejemplo, si un usuario hace clic en 'Mi cuenta' antes de iniciar la sesión (no hay ninguna sesión) luego se los redirecciona a la página de inicio de sesión con éxito, pero una vez que inician sesión, ¿cómo los envío de vuelta a la página "Mi cuenta"?

Métodos que probé incluyen $_SESSION['HTTP_REFERER].

Cualquier ayuda sería muy apreciada.

Respuesta

8

Usar $_SERVER['HTTP_REFERER'] es peligroso, ya que la referencia sería la misma página de inicio de sesión si el usuario recibiera un error al intentar iniciar sesión (como una contraseña incorrecta). Debe almacenar la URL reversa dentro de una variable de sesión antes de redirigir al usuario a la página de inicio de sesión, luego, después de que logren iniciar sesión, redirigirlos a la URL restituida almacenada.

Por ejemplo, digamos que usted necesita para proteger page.php, usted podría tener algo como esto al principio del archivo:

if (empty($_SESSION['user'])) { 
    $_SESSION['backURL'] = $_SERVER['REQUEST_URI']; 
    header('Location: login.php'); 
    exit; 
} 

Entonces, después de que el usuario inicia sesión con éxito en, usted podría llenar la variable $_SESSION['user'] entonces redirigir a la URL que haya guardado antes de enviarlo a la página de inicio de sesión (o en la raíz del sitio si se da la circunstancia de que usted no tiene ninguna URL de vuelta almacenado por cualquier razón):

$backURL = empty($_SESSION['backURL']) ? '/' : $_SESSION['backURL']; 
unset($_SESSION['backURL']); 
header('Location: ' . $backURL); 
exit; 
+0

Este método funcionó, gracias por ayudar a todos los que dieron respuestas muy acertadas. Gracias una vez más Radu – Sahil

+0

Será mucho mejor si prueba $ _SESSION ['backURL']; porque si alguien marcó como favorito la página de inicio de sesión y la abre directamente, habrá un error. algo así como página no encontrada ... – Joberror

+0

@joberror, esa es una buena idea, respuesta actualizada. – rid

1

intente esto:

<?php 
    header("Location: " . $_SERVER["HTTP_REFERER"]); 
?> 
+0

Este no es un método seguro. –

+1

Soy consciente. El OP preguntó específicamente sobre "Enviar al usuario de vuelta a * página de referencia *" y el fragmento hace exactamente eso, lo que no implica que esto sea lo que OP quería. – Tibor

0
header("Location: " . $_SERVER["HTTP_REFERER"]); 

lo hará, pero tenga en cuenta:

No se puede emitir (echo, print_r, etc. etc.) cualquier cosa antes de enviar cabeceras personalizadas.

+0

intentado arriba pero no funciona. me mantiene en la misma página después de iniciar sesión. La sesión se crea con éxito, lo que significa que el nombre de usuario y la contraseña son correctos. – Sahil

1

que la página que sí establece el redireccionamiento una variable de sesión que es la dirección URL de esa página:

session_start(); 
if (!$logged_id) 
{ 
    $_SESSION['redirect_url'] = $_SERVER['PHP_SELF']; 
    header('Location: login.php'); 
    exit; 
} 

Luego, después de un inicio de sesión con éxito los redirija a la URL:

session_start(); 

/* Login code goes here */ 

$redirect_url = (isset($_SESSION['redirect_url'])) ? $_SESSION['redirect_url'] : '/'; 
unset($_SESSION['redirect_url']); 
header("Location: $redirect_url", true. 303); 
exit; 
+0

No use '$ _SERVER [" HTTP_REFERER "]'. Prueba mi código en su lugar. –

+0

bien lo haré gracias – Sahil

0

Usted debe recordar la última página visitada en una variable como $_SESSION["last_page"] (excluir la página de inicio de sesión). Después de que el usuario haya iniciado sesión correctamente, tome el valor de la variable y redirija al usuario a su ubicación anterior.

No se puede usar la referencia. Por ejemplo, si el usuario falló su primer intento de inicio de sesión, en el segundo intento su referencia será la página de inicio de sesión.

Otra forma es autenticar al usuario que utiliza ajax sin página de inicio de sesión independiente. Si el inicio de sesión fue exitoso, simplemente puede actualizar la página con javascript.

Cuestiones relacionadas