entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Volver a la misma página después de iniciar sesión PHP

Hola, tengo una web que tiene las páginas index.php , producto.php , login.inc.php .

El login lo tengo con un require_once() en todas las páginas.

En la página producto , hay un botón que dice comprar, pero si no estás logueado no te deja ver el botónde paypal para comprar.

Lo que quiero hacer es que si en ese momento van arriba e inician sesión, después de inciar sesión vuelva a la misma página y no a la de inicio.

Ya se que con el header("location:producto.php") se puede hacer, pero no quiero eso, porque sino, en todas las páginas cuando inicio sesión se dirigiría a producto.php.

Quiero que al iniciar sesión vuelva a la misma página donde se encuentrem tanto si está en producto.php como en contacto.php , etc..

Me explico?

UN saludo ! Gracias!

0voto

carlossevi comentado

¿En qué página tienes el formulario de login y hacia dónde redirige?

0voto

jabixo comentado

El formulario de login está en todas las páginas, ya que con la función require_once('login.inc.php') me las traigo a todas las páginas, arriba del todo. Y se dirige hacia procLogin.php que procesa si el usuario y pass coinciden, y si coinciden se va a index.php con header(location:"index.php") . Pero no quiero que se vaya hacia el index, si no a la página donde está actualmente.

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola jabixo,

Tenés la variable superglobal $_SERVER['HTTP_REFERER']) con contiene el valor del URL desde el qué es llamdo un script.

Lo que tenés que hacer es que login.php use el valor de esta variable para hacer el header("location: ...") luego de finalizar el proceso.

Algunas consideraciones:

  • la variable verás que tiene la ruta completa y tal vez quieras parsearla para quedarte solo con el nombre del archivo y redirigir a una ruta relativa.
  • si el usuario se loguea incorrectamente, la próxima vez la variable vale login.php, que es de dónde se viene... podrías solucionar esto guardando la variable en una variable de sesión, pero solo si no es login.php, así volvés al lugar correcto.
  • la varieable contiene los parámetros GET, pero por supuesto que no los POST, así que si productos.php sabe qué producto mostrar por POST, tendrás que pasar estos valores de alguna manera para mostrar el producto correspondiente.
  • no estaría demás validar que el REFERER sea de tu propio dominio, por si alguien pone un enlace a tu formulario de login... ya que luego de logueado se redirigiría a su web de origen.
  • muchos de estos problemas se evitan si el login es en un DIV que solo pnés visible en la propia página, pero te ganás un montón de otros problemas, como la autentificación vía AJAX y la notificación a la paǵina de productos de que ahora sí se está logueado (yo trato de evitar estos problemas teniendo una página aparte para el login, igual que vos).

Saludos!

0voto

jabixo comentado

Creo que la forma en la que tengo el login no la he explicado bien.. jeje. Tengo un botón arriba a la derecha que mediante jQuery me saca el div del formulario en la pantalla y lo demás se hace oscuro. Es un div oculto. Que cuando haces clic en el botón se desoculta.

Puedes verlo aquí, es el icono de arriba a la derecha..

http://eliana-online.com/PROVES/Proyecto/index.php

De todas formas voy a intentar lo que me dices de la varibale $_SERVER['HTTP_REFERER'])

Gracias , saludos !

0voto

carlossevi comentado

La respuesta de @Leonardo-Tadei es correcta, puedes sustituir el "index.php" por el $_SERVER['HTTP_REFERER'] aunque siempre teniendo en cuenta sus muy buenos consejos sobre la URL relativa/absoluta y el control de seguridad de que el referer sea de tu dominio.

Para ello puedes utilizar la función parse_url() (Documentación). Quedaría:

$url_origen = parse_url($_SERVER['HTTP_REFERER']);
$url_redireccion = ($url_origen['host'] == 'midominio.com' ? $url_origen['path'] : 'index.php');

Por si no estás muy familiarizado con esa expresión, he utilizado el operador ternario de asignación.

0voto

Leonardo-Tadei comentado

Jabixo,

sí te explicaste bien. La cuestión central es que el formulario de login tiene como action procLogin.php, y por tanto el intento de login salta a otra página... teniendo en cuenta esto es que te respondí para que procLogin.php "sepa" quien la llama y al final del proceso devolver al usuario a la misma página.

Capaz que el que no se explicó bien fui yo, o que te perdiste en alguna parte de mi larga respuseta :-(

0voto

jabixo comentado

eso es! Lo hice así y me funciona correctamente:

if(crypt($pass, $passwordenBD) == $passwordenBD)
    {
        $_SESSION['logueado']=1;
        $_SESSION['user']=$_POST['user'];   

        $origen= $_SERVER["HTTP_REFERER"];

        header('location:'.$origen);
    }
    else{   
        header('location:'.$origen);
        }

Gracias!

Editado: movido a comentario

0voto

Leonardo-Tadei comentado

Hola Jabixo,

me alegra que te haya servido.

Tené en cuenta los puntos que et menciono en la respuesta para mejorar la implementación. Tu código asume que siempre se llama al script de login desde tu propia web y no indica nada al usuario si puso mal su usuario y contraseña.

Si lo vas a dejar así (vamos, que es tu código y hacés lo que más te guste), lo podés simplificar así:

$origen= $_SERVER["HTTP_REFERER"];
if(crypt($pass, $passwordenBD) == $passwordenBD)
    {
        $_SESSION['logueado']=1;
        $_SESSION['user']=$_POST['user'];   
    }
header('location:'.$origen);

Saludos!

0voto

jabixo comentado

lo haré, gracias!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta