2010-02-21 146 views
9

Digamos que quiero navegar a la página de contacto. Pero para llegar allí, el sitio requiere que inicie sesión. Después de iniciar sesión, se supone que debo redirigirme a la página de contacto, pero estoy en otro lugar. ¿Qué debo hacer para redirigirme a la página que quiero después de iniciar sesión?Redirigir a la página anterior después de iniciar sesión con PHP

Tengo una fuerte sensación de que esto tiene algo que ver con las sesiones, pero no obstante. ¿Cuál debería ser el enfoque?

+0

buena pregunta, y bienvenido a SO :) –

+0

Buena pregunta que creo que muchos programadores necesitarán saber la respuesta. Gracias. – TopDeveloper

Respuesta

10

Usted tiene tres enfoques generales:

  1. almacenar la página anterior en la sesión;
  2. Almacenar la página como una variable GET; o
  3. Realice un redireccionamiento interno a la página de inicio de sesión.

(1) se ve algo como:

<?php 
session_start(); 
if (!$_SESSION['userid']) { 
    $_SESSION['page'] = '/contact'; 
    header('Location: /login'); 
    exit; 
} 
... 
?> 

En conexión exitosa recuperar $_SESSION['page'] y redirigir.

(2) es similar, excepto que no hay una variable de sesión. En su lugar, tiene:

header('Location: /login?return=/contact'); 

para pasar la redirección. La página de inicio de sesión deberá incluirlo como un campo de formulario oculto en la página que presenta al usuario una solicitud de nombre de usuario y contraseña.

(3) es similar pero no redirige a una página diferente. En cambio, cada página puede ser una página de inicio de sesión. Si el usuario no está conectado, se presenta un formulario de inicio de sesión. La URL seguirá siendo "/ contacto". Cada página detectará y gestionará los intentos de inicio de sesión.

La ventaja de este método es una redirección externa menos y es más fácil manejar los formularios enviados. Con esto quiero decir que imagina que alguien llena un formulario en una de sus páginas y luego hace clic en enviar. El sistema ve que su inicio de sesión ha expirado. Si redirige al usuario a una página nueva y luego lo redirecciona de nuevo, es probable que deba volver a ingresar todos los campos del formulario. Si maneja el inicio de sesión implícitamente, puede incluir todos los campos de formulario como entradas ocultas y una vez que haya iniciado sesión, trátelo a la perfección como una presentación de la página original.

+2

3. almacenar la página anterior como variable GET :) – n00b

4

El enfoque que normalmente se utilizan:.

  1. En su página de contacto, redirigir a la página de inicio de sesión si el usuario no está conectado a
  2. En la página de inicio de sesión, utilice el $_SERVER['HTTP_REFERER'] variable (que será establecer en la página de donde vino el usuario, es decir, la página de contacto) y almacenar eso como un campo oculto.
  3. Después de que el usuario inicie sesión, redirija a la página en la que se encontraba.

Lo bueno de esto es que funciona automáticamente para todas las páginas que requieren iniciar sesión sin tener que establecer variables de sesión en cada página.

Una advertencia: cuando inicie sesión, debe verificar que la página en el referer esté en su sitio, no en un sitio completamente diferente, por si el usuario proviene de Google, por ejemplo.

2

Tiendo a redireccionar a la página de inicio de sesión, pasando la URL actual en la cadena de consulta.

La página de proteger

session_start(); 

if (!isset($_SESSION['user_id'])) 
{ 
    // Fetch current URL 
    $this_url = $_SERVER['REQUEST_URI']; 

    // Redirect to login page passing current URL 
    header('Location: login.php?return_url=' . urlencode($this_url)); 
    exit; 
} 

// Continue processing 
echo 'Hello from this page'; 

La página de inicio de sesión

session_start(); 

// Simulate logging in user 
$_SESSION['user_id'] = 1; 

// Fetch URL to redirect to 
$return_url = isset($_GET['return_url']) ? $_GET['return_url'] : 'site_home.php'; 

// Redirect back 
header('Location: ' . $return_url); 

En el código anterior que acabo de simular el proceso de iniciar la sesión. Normalmente, el usuario debe presentar sus credenciales a través un formulario, las credenciales se verifican y luego el usuario inicia sesión. La URL de la página a la que se debe redirigir debe mantenerse a través de este proceso. Puede continuar pasando la URL en la cadena de consulta o a través de un campo de entrada oculto en el formulario.

+0

Gracias, me ayudó en una necesidad similar ..... – Pushpendra

Cuestiones relacionadas