Foros del Web » Programando para Internet » PHP »

Redirigir a la página después del login

Estas en el tema de Redirigir a la página después del login en el foro de PHP en Foros del Web. Buenos días. A ver si pueden echarme una mano con un problemilla que me ha surgido. Tengo un sitio web montado con control de acceso ...
  #1 (permalink)  
Antiguo 08/07/2011, 04:08
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Redirigir a la página después del login

Buenos días.

A ver si pueden echarme una mano con un problemilla que me ha surgido. Tengo un sitio web montado con control de acceso y sesiones de usuario. En una de las páginas, he montado un sistema de envío de correos electrónicos que envía al usuario que participa con algún comentario un correo con los datos que ha añadido y, al final del todo, la URL dónde puede hacer un seguimiento de su contribución.

El problema que tengo es que cuando el usuario sigue dicha URL, la herramienta detecta que no está logueado y lo manda al índice, para que se loguee. Una vez hecho esto, necesito que se le redirija a la página que quería ver y no a la inicial. La verdad que tengo el problema bastante situado y creo saber por donde van los tiros, pero no acabo de dar con la clave

El código de chequeo del login es este:
Código:
if (!$membersite->CheckLogin()) {
	$membersite->RedirectToURL("../index.php");
	exit;
}
Y en index.php tengo esto:
Código:
if (isset($_POST['submit'])) {
	if ($membersite->Login()) {
		$membersite->RedirectToURL("php/principal.php");
	}
}
Me imagino que tengo que añadir un IF a la redirección que haga que si venimos de una página privada redirija a dicha página y, si no, vaya a princial.php (que es lo que hay). Básicamente sería esto:
Código:
if (isset($_POST['submit'])) {
	if ($membersite->Login()) {
		if (/*vengo de alguna página*/) {
			$membersite->RedirectToURL("/*esa página*/");
		} else {
			$membersite->RedirectToURL("php/principal.php");
		}
	}
}
Muchas gracias de antemano y espero sus respuestas.

Un saludo.
  #2 (permalink)  
Antiguo 08/07/2011, 04:56
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Redirigir a la página después del login

la "solución" rápida, sería la siguiente:

Cuando haces
Código PHP:
if (!$membersite->CheckLogin()) {
    
$membersite->RedirectToURL("../index.php");
    exit;

en la URL a la que accede desde el correo, podrías mandar, por GET, algún parametro al index, en plan
Código PHP:
if (!$membersite->CheckLogin()) {
    
$membersite->RedirectToURL("../index.php?ref=miurldemail");
    exit;

Así, en el login (index.php) modificas el formulario, y le añades un
Código HTML:
<input type="hidden" value="<?php echo $_GET['ref']; ?>" name="ref"> 
Así, después podrías hacer algo así como:
Código PHP:
if (isset($_POST['submit'])) {
    if (
$membersite->Login()) {
        if (isset(
$_POST['ref']) {
            
$ref $_POST['ref'];
                        
$membersite->RedirectToURL($ref);
        } else {
            
$membersite->RedirectToURL("php/principal.php");
        }
    }

Más o menos, con algo así debería servirte.

Un saludo!
  #3 (permalink)  
Antiguo 08/07/2011, 05:03
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Redirigir a la página después del login

Y por qué no guardas esa url en la sesión?
  #4 (permalink)  
Antiguo 08/07/2011, 05:08
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Redirigir a la página después del login

Buenas,

En primer lugar, gracias por la respuesta. La verdad que ya lo había pensado de esta forma que comentas, pero lo descarté porque no me gusta guarrear las URL y, mucho menos, la del índice, que debería ser limpia, según creo. Y hacerlo por SESSION me parece peor, ya que va en contra de la definición de sesión, ni si quiera he logueado, cómo voy a tener una sesisón?

Puede que sea más por estilo (o por cabezonería, que tengo mucha), pero me gustaría buscar otra solución. La idea que tengo en la cabeza, pero que no puedo concretar es la siguiente: realmente, yo estoy pasando por la página en cuestión, sólo que al chequear el login mando a index.php, pero en el historial debe estar la página a la que quiero acceder. Los problemas son dos, necesito una forma de saber si hay algo en el historial y si ese algo pertenece a una página de mi aplicación y, una vez comprobado, necesito volver atrás en el historial, una vez logueado el usuario.

No sé, me parece sencillo y sería lógico que se puediera hacer directamente, pero no lo encuentro por ningún lado. A ver si con estas ideas me puedes echar una mano.

Muchas gracias y un saludo.
  #5 (permalink)  
Antiguo 08/07/2011, 05:10
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Redirigir a la página después del login

Si ni siquieras has logueado, pero tienes un session_start, claro que tienes sesión!!11 :D:D:D
  #6 (permalink)  
Antiguo 08/07/2011, 05:13
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Redirigir a la página después del login

Sé que puedo crear una sesisón, f0n, lo que comento es más filosofía de la informática.

La aplicación la tengo montada para tener una sesión desde el momento en que el usuario introduce la contraseña y luego la utilizo para varias cosas, hasta que el usuario desloguea, momento en el que me cargo la sesión. No es cuestión de poder, es cuestión de que tenga sentido o no, ya digo, es más estilo que otra cosa. Obviamente, si no encuentro otra solución, lo haré por sesión, pero me niego a pensar que no hay forma de hacerlo como he explicado.

Un saludo y gracias por la respuesta.
  #7 (permalink)  
Antiguo 08/07/2011, 05:16
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Redirigir a la página después del login

A ver, filosofías aparte, todo depende como tú bien dices en cómo tengas diseñada la aplicación. Por qué no tienes una sesión desde que un usuario entra, guardando simplemente esa url, y OTRA sesión diferente para un usuario logueado?, sería fácil, sencillo, SEGURO, y para toda la familia.

Otra forma, es almacenando una cookie, que básicamente viene a ser casi lo mismo, pero más campechano.

Un saludo
  #8 (permalink)  
Antiguo 08/07/2011, 05:16
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Redirigir a la página después del login

Cita:
Iniciado por vgonga1986 Ver Mensaje
Sé que puedo crear una sesisón, f0n, lo que comento es más filosofía de la informática.

La aplicación la tengo montada para tener una sesión desde el momento en que el usuario introduce la contraseña y luego la utilizo para varias cosas, hasta que el usuario desloguea, momento en el que me cargo la sesión. No es cuestión de poder, es cuestión de que tenga sentido o no, ya digo, es más estilo que otra cosa. Obviamente, si no encuentro otra solución, lo haré por sesión, pero me niego a pensar que no hay forma de hacerlo como he explicado.

Un saludo y gracias por la respuesta.
¿Te da igual ensuciar el "login" con POSTS?

Podrías hacer una comprobacion del referer del servidor, si viene de la url del mail, añadir un hidden input para que luego al hacer el login, sepa q tiene q redirigirlo
  #9 (permalink)  
Antiguo 08/07/2011, 05:24
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: Redirigir a la página después del login

Cita:
Iniciado por Eleazan Ver Mensaje
¿Te da igual ensuciar el "login" con POSTS?

Podrías hacer una comprobacion del referer del servidor, si viene de la url del mail, añadir un hidden input para que luego al hacer el login, sepa q tiene q redirigirlo
También una buena opción ;)
  #10 (permalink)  
Antiguo 08/07/2011, 05:55
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Redirigir a la página después del login

Es muy buena opción, justo lo que buscaba. Lo he dejado así en la página index:

Código:
<input type="text" name="url" value="<?php echo $membersite->GetReferer(); ?>"/>
Código:
if (isset($_POST['submit'])) {
	if ($membersite->Login()) {
		if ((isset($_POST['url'])) && (!empty($_POST['url']))) {
			$membersite->RedirectToURL($_POST['url']);
		} else {
			$membersite->RedirectToURL("php/principal.php");
		}
	}
}
Y, a su vez, GetReferer queda así:
Código:
	function GetReferer() {
		$ret = '';
		if (isset($_SERVER['HTTP_REFERER'])) {
			if (strpos($_SERVER['HTTP_REFERER'], 'bug_detail.php')) {
				$ret = $_SERVER['HTTP_REFERER'];
			}
		} 
		return htmlentities($ret);
	}
Gracias a los dos, al final ha quedado bastante bien.

Un saludo.
  #11 (permalink)  
Antiguo 08/07/2011, 07:44
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Redirigir a la página después del login

Solo un apunte, no todos los navegadores ni en todas sus versiones te van a entregar el "referer", aparte, se puede modificar dicho dato, así que no debes confiar en el dato y lo mas recomendable es filtrarlo antes de enviar al usuario a dicha página.

Más info, aquí
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: login, página, redirigir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:52.