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

el navegador no esta redirigiendo bien

primero que todo muchas gracias a las personas que me han colaborado con los problemas que he tenido haciendo mi login en PDO y he podido solucionarlo

Bueno Empecemos el problema esta en mi archivo de seguridad.php que incluye mi index
primero que todo dejare el login.php

<?php

    $correo=$_POST['correo'];
    $clave=md5($_POST['clave']);
    require_once('Conexion.php');
    $conn = Conectar();

    $stmt = $conn->prepare("SELECT  id_usuario, nombre, apellido, correo, p.id_perfil, perfil FROM usuario u INNER JOIN perfil p ON p.id_perfil=u.id_perfil WHERE u.correo=:correo AND u.clave=:clave");
    $stmt->bindParam(':correo',$correo);
    $stmt->bindParam(':clave',$clave);
    $stmt->execute();

    if($stmt->rowCount()>=1){
        session_start();
        $fila=$stmt->fetch();
        if($fila['id_perfil']==1)
            {header("Location: administrador/index.php");}
        if($fila['id_perfil']==2)
            {header("Location: aprendiz/index.php");}
        if($fila['id_perfil']==3)
            {header("Location: root/index.php");}
    }
    else{
         echo "<font color='red'>Datos No Validos</font>";
    }

?>  

y este es mi archivo de seguridad.php

<?php
    session_start();
    if(!isset($_SESSION['id_perfil'])==1){
        header("Location: index.php");
    }

ahora me explico si quito el archivo de seguridad.php al hacer login lo hace correcto por lo que creo que el login.php esta correcto
identificando que usuario entro
pero al agregarle seguridad.php me dice que no se esta redirigiendo bien y el problema de quitarlo es que cualquier persona con saber la url puede entrar espero que me puedan dar una mano nuevamente en esta ocasion y muchas gracias

1 Respuesta

3votos

Leonardo-Tadei Puntos227320

Hola @zenosama,

hay varias cuestiones en tu código. Vamos por partes:

En login.php estás haciendo la redirección a la página según el perfil. El error que tenés es que al ser un logín válido, no estás poniendo ningún valor a $_SESSION['id_perfil'], entonces suando seguridad.php lo comprar, al no estar seteado, nunca se puede ingresar.

Pero en seguridad.php estás redirijiendo a index.php, que al ser una ruta relativa, carga el mismo index.php que tiene incluído a seguridad.php, provocando una redirección infinita, lo que al ser detectado por el navegador da un mensaje de error y deja de reintentar (afortunadamente!)

En caso de no estar logueado, tendrías que redirigir a header("Location: ../index.php"); que es tu página de login.

Ahora viene lo grave: no está bien asumir que un usuario es válido solo porque tiene una variable de sesión creada, porque en este caso no tenés manera de desloguear a un usuario borrándolo no de cambiarle el perfil, ya que con tu código, mientras no se desloguee y se vuelva a loguear, quedará siempre conectado.

Lo correcto es que en el login, guardes en 2 variables de sesión el usuario y la contraseña, y que seguridad.php con estos valores vuelva a consultar a la DB para ver si en este momento el usuario es válido y tiene permiso para ver esa página.

También es un error la consulta if($stmt->rowCount()>=1) para ver si el usuario es válido. La consulta correcta es if($stmt->rowCount()==1) para evitar que un fallo en la DB que permita por ejemplo repetir el nombre de usuario, permita ingresar a personas con el perfil incorrecto.

Saludos cordiales

PD: para agradecer a las personas que te han ayudado con sus repuestas, seleccionales la respuesta, así al aparecer como solucionada le ayuda a otros que puedan tener un problema parecido.

1voto

zenosama comentado

Hola gracias por responder pero me puedes orientar es que digamos estoy perdido
y nose como hacer lo que me mencionas y muchas gracias

0voto

Leonardo-Tadei comentado

Hola @zenosama,

son varios temas relacionados, pero independientes.

La solución inmediata a tu problema de la redirección es cambiar en seguridad.php

header("Location: index.php");

por

header("Location: ../index.php");

Luego, te recomiendo abrir una pregunta específica por cada problema que te vaya surgiendo, con la porción de código relacionada.

Es relativamente simple responder una pregunta puntual y concreta, y endiabladamente difícil responder varias preguntas a la vez o una pregunta general...

Saludos cordiales

1voto

zenosama comentado

Hola y muchas gracias Leonardo ya corregi lo de if($stmt->rowCount()==1)
y lo de ../index.php usted me dice que haga preguntas por cada problema surgido
pero no es hacer muchas preguntas acerca de un mismo codigo?

0voto

Leonardo-Tadei comentado

Hola @zenosama,

serían preguntas distintas sobre el mismo código, entendiendo que el "código" es todo para la misma aplicación.

Te lo sugiero porque veo en ED y en todo foro que las preguntas claras y concretas son mucho mejores y más respondidas que las preguntas genéricas...

Siempre está bueno cuando se empieza a hacer preguntas ojear este viejo texto: http://www.sindominio.net/ayuda/preguntas-inteligentes.html. A mi me resultan muy buena guía para poder obtener respuestas!

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