1. ¡OFERTA! con cupón "DIRVPS": hosting por $0,01 y también VPS Linux y Windows por $0,01 el primer mes por Interserver ← publi
    Descartar aviso
Descartar aviso
Al usar este sitio web, aceptas que nosotros y nuestros socios podamos establecer cookies para fines tales como personalizar el contenido y la publicidad. Más información.

pedir login en pagina restringida

Tema en 'Programación y Diseño Web' iniciado por kede, 11 Sep 2008.

  1. kede

    kede Nuevo usuario

    Hola amigos,
    Bueno poco a poco voy aprendiendo cosillas sobre PHP y MySQL pero aún no me da para arreglar mis propios errores...
    Bien, comento, tengo una web para acceso a todo el publico y luego una sección para tener acceso a algunas descargas de videos o fotos en la que he tomado un sistema de registro y login y lo he adaptado a mi web. Lo estoy probando en mi pc con appserv y funciona perfectamente, se crean los usuarios, me permite acceder con ese usuario y todo bien.

    El problema es que si escribo directamente la URL de esa zona restringida a los usuarios registrados, accede sin pedirme login. Es logico, pues al fin y al cabo no he hecho nada para evitarlo XD
    De ahí viene mi pregunta, ¿como se evita eso?
    Supongo que tengo que añadir algo a esa pagina con contenido pero no se el que... si me podeis guiar un poco...

    Os adjunto en un ZIP todos los archivos que estoy usando por si es necesario.

    Gracias nuevamente por vuestra ayuda y un saludo a todos
     

    Adjuntos:

  2.  
  3. Carxl

    Carxl Nuevo usuario

    Hola kede...

    Pues la lógica es la siguiente:

    Cuando se loguean satisfactoriamente en tu sitio, debes crear una variable de sesión que te indique que el usuario que está navegando está debidamente autorizado (bastaría como ponerla en "TRUE" si se logueó con éxito).

    Esa variable la debes "preguntar en cada página que tenga acceso restringido" osea hacer una función que debe ir al principio de cada página y revise que esa variable está en "TRUE"o activa, en caso de que no sea así... redireccionas la index o a la página que tú quieras.

    Lee este <a href="http://www.desarrolloweb.com/manuales/37/" target="_blank">artículo</a> completo

    Saludos :adios:
     
  4. kede

    kede Nuevo usuario

    Muchas gracias Carxl,

    Mañana me lo leo enterito con calma en el trabajo, parece interesante ese articulo.

    Un saludo!
     
  5. kede

    kede Nuevo usuario

    Nada no hubo manera...

    Seguí el articulo paso a paso creando uno nuevo como se explicaba y funcionaba, pero a la hora de realizarlo para recoger los datos de user y pass de una base de datos no funcionaba.

    Intenté adaptar el modulo de seguridad a mi web restringida y por algún motivo no hace login, sino que se recarga la pagina como si me volviese a mandar a esa pagina de login...

    En fin nose, se que mis conocimientos para poder apañarmelas solo son nulas, pero bueno seguiré indagando nuevas formas o alguna solución alternativa o si alguien me sabe explicar que debo hacer estaria tremendamente agradecido.

    Igualmente muchas gracias Carxl por el articulo, pues aprendí cosillas nuevas aunque no consiguiese solucionar lo mio.

    Gracias, un saludo.
     
  6. Carxl

    Carxl Nuevo usuario

    Hola kede...

    Dime que intentaste y que se te dificultó... e intentamos solucionarlo vale?

    Saludos :adios:
     
  7. kede

    kede Nuevo usuario

    Hola Carxl, disculpa la demora en contestar.

    A ver, te explico el problema.

    Seguí el articulo que me sugeriste al pie de la letra y no hay ningun problema al usarlo.

    En uno de los capitulos dice como obtener los datos de una base de datos en lugar de incluir el usuario y password en el php.
    Es lo que se explica en este capitulo: <a href="http://www.desarrolloweb.com/articulos/1095.php" target="_blank">http://www.desarrolloweb.com/articulos/1095.php</a>

    Lo que hice en esta parte, que explica la alternativa al control.php que usaba para un solo usuario, fue, evidentemente poner los datos de acceso a mi base de datos, y a continuación modificar "nombre_usuario" por "login" y "clave_usuario" por "password" que es como lo tengo en mi base de datos.

    Ahora cuando intento acceder con mis datos de mi bd, me lanza siempre el mensaje de login incorrecto.


    Así pues te pongo como tengo creada mi tabla y como quedan los archivos php para la autentificación.

    Tabla en bd
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->
    CREATE table usuarios (
    &nbsp;&nbsp;`id` TINYINT(4) AUTO_INCREMENT,
    &nbsp;&nbsp;`nombre` TEXT,
    &nbsp;&nbsp;`apaterno` TEXT,
    &nbsp;&nbsp;`amaterno` TEXT,
    &nbsp;&nbsp;`login` CHAR(40),
    &nbsp;&nbsp;`password` CHAR(20),
    &nbsp;&nbsp;`email` TEXT,
    UNIQUE (id) );
    <!--c2--></div><!--ec2-->

    Nada mas, no logro comprender por que lanza error de login... igual es la tonteria mas grande del mundo pero no entiendo el motivo de que no reconozca ese login...

    Gracias nuevamente y un saludo!
     

    Adjuntos:

  8. Carxl

    Carxl Nuevo usuario

    Hola kede...

    Pues estuve revisando tu archivo "control.php"... hay varias cosas para descartar y comentar:

    1. session_start, en lo posible, debe ser la primera línea después de <?php.
    2. hazle un echo a tu consulta, la copias de lo que te muestre en pantalla y luego la ejecutas directamente en mysql (para descartar que tu consulta esté mal sintácticamente).
    3. Evita usar "session_register" (ya es casi obsoleta), en lugar de ella, usa "$_SESSION".
    4. No entiendo esta parte:

    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->
    session_register("autentificado");
    $autentificado="SI";
    <!--c2--></div><!--ec2-->

    Creo que estás asumiendo que al declarar "session_register("autentificado");", se crea una variable "$autenticado" y le das el valor de "SI". Si estoy en lo correcto, tu deducción está errada, para darle el valor a la sesión lo debes hacer de la siguiente manera:

    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->
    //Aquí le dices que la variable de sesión "autenticado" tomará el valor de "SI"
    $_SESSION['autenticado']="SI";
    <!--c2--></div><!--ec2-->

    Con todas estas observaciones, creo que se soluciona tu problema...

    Saludos :adios:
     
  9. kede

    kede Nuevo usuario

    Nada, no hay manera... Hice lo que me dijiste y sigue dandome usuario incorrecto...

    He probado con otro control.php que publicó un usuario y sigue llevandome a login incorrecto.

    Este es el nuevo que he probado.

    control.php
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->
    <?php

    // hacemos una conexion a la bd
    $conexion = mysql_connect('localhost','root','mi_contraseña');

    // seleccionamos la Bd
    mysql_select_db ("usuarios", $conexion);

    //realizamos una consulta a la bd
    $query = mysql_query("SELECT * FROM usuarios WHERE login='$usuario' and password='$contrasena'", $conexion);

    //definimos un array
    $array = mysql_fetch_array($query);

    //realizamos un array de los campos que contienen el usuario y la contraseña
    $arrayusuario = ($array["login"]);
    $arraypassword = ($array["password"]);

    //vemos si el usuario y contraseña es váildo
    //llamamos los arrays en las siguiente linea.
    if ($_POST["usuario"]=="$arrayusuario" && $_POST["contrasena"]=="$arraypassword"){
    //usuario y contraseña válidos
    //defino una sesion y guardo datos
    session_start();
    $_SESSION["autentificado"];
    $_SESSION['autentificado'] = "SI";
    header ("Location: aplicacion.php");
    }else {
    //si no existe le mando otra vez a la portada
    header("Location: index.php?errorusuario=si");
    }
    ?>
    <!--c2--></div><!--ec2-->
     
  10. Carxl

    Carxl Nuevo usuario

    <!--quoteo(post=336316:date=Sep 16 2008, 09:37 AM:name=Carxl)--><div class='quotetop'>CITA(Carxl @ Sep 16 2008, 09:37 AM) [snapback]336316[/snapback]</div><div class='quotemain'><!--quotec-->
    1. session_start, en lo posible, debe ser la primera línea después de <?php.
    2. hazle un echo a tu consulta, la copias de lo que te muestre en pantalla y luego la ejecutas directamente en mysql (para descartar que tu consulta esté mal sintácticamente).
    3. Evita usar "session_register" (ya es casi obsoleta), en lugar de ella, usa "$_SESSION".
    4. No entiendo esta parte:
    <!--QuoteEnd--></div><!--QuoteEEnd-->

    Hola Kede... veo que no seguiste algunas de mis indicaciones, además no me comentas lo de la consulta :unsure: :unsure:

    El primer punto, veo que no lo aplicaste...
    El segundo punto, no sé que te arroja, si la hace bien, no sé si descartar problema de DB.
    El tercer punto, veo que quitaste el session_register, pero dejaste:
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->
    $_SESSION["autentificado"];
    <!--c2--></div><!--ec2-->

    Quítalo, es suficiente con:
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->
    $_SESSION['autentificado']="SI";
    <!--c2--></div><!--ec2-->
    El cuarto punto no me respondiste....

    El código que observo, aparentemente está bien. Pero debes al menos hacer el punto 1 y 2.

    Revisa eso de nuevo Kede, de lo contrario no puedo descartar posibilidades para seguir en tu ayuda.

    Ahh!! Otra cosa... que versión de php tienes??

    Saludos :clapping:
     
  11. kede

    kede Nuevo usuario

    - Perdona, esque te lo puse el codigo antes de cambiar lo de session_start, pero si lo probé y es igual.

    - También he probado dejando solo lo de $_SESSION['autentificado']="SI"; y mas de lo mismo. Me envia a "index.php?errorusuario=si"

    - La parte que no entiendes, para serte sincero, yo tampoco. Mis conocimientos en php son casi nulos, pero hay cosas que puedo llegar a comprenderlas, pero esa parte concreta cuando la vi no la entendí, sorry

    - estoy usando PHP 5.2.6. con el appserv 2.5.10 (Instalé un appserv mas nuevo pero me daba problemas al ingresar a phpMyadmin)

    - Para terminar de responder a tus preguntas, te lanzo otra pregunta...
    <!--quoteo--><div class='quotetop'>CITA</div><div class='quotemain'><!--quotec-->2. hazle un echo a tu consulta, la copias de lo que te muestre en pantalla y luego la ejecutas directamente en mysql (para descartar que tu consulta esté mal sintácticamente).<!--QuoteEnd--></div><!--QuoteEEnd-->
    Disculpa mi ignorancia pero no se que quieres que haga... Que tengo que hacer???

    Gracias nuevamente y disculpa las molestias ;)
     
  12. Carxl

    Carxl Nuevo usuario

    No kede no te preocupes :arriba: Sigamos:

    Tú, en los archivos que dejaste(control.php), tienes esta consulta:

    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->
    $ssql = "SELECT * FROM usuarios WHERE login='$usuario' and password='$contrasena'";
    <!--c2--></div><!--ec2-->

    Ahora haz esto:

    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->
    echo $ssql="SELECT * FROM usuarios WHERE login='$usuario' and password='$contrasena'";
    <!--c2--></div><!--ec2-->

    Guarda el archivo. Recarga tu página y verás que en pantalla te muestra esa consulta...

    La idea es que copies esa consulta que te arroja y la ejecutes directamente en mysql(phpmyadmin, mysql_administrator o directamente en consola mysql :D) y mires que la consulta esté bien y no te arroje errores.

    Saludos :adios:
     
  13. kede

    kede Nuevo usuario

    Ah vale ya entendí jeje,
    pues al hacerle el echo me lanza esto al logearme:
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->SELECT * FROM usuarios WHERE login='kede' and password='mi_contraseña'
    Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\autentificacion-php\control.php:9) in C:\AppServ\www\autentificacion-php\control.php on line 24<!--c2--></div><!--ec2-->

    Si a lo que te refieres que ejecute desde mysql es lo de
    SELECT * FROM usuarios WHERE login='kede' and password='mi_contraseña'
    Me muestra esto....
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->MySQL ha devuelto un valor vacío (i.e., cero columnas). (La consulta tardó 0.0003 seg)

    ---consulta SQL:------------------------------
    SELECT *
    FROM usuarios
    WHERE login = 'kede'
    AND PASSWORD = 'mi_contraseña'
    LIMIT 0 , 30
    <!--c2--></div><!--ec2-->
     
  14. Carxl

    Carxl Nuevo usuario

    Lo siento kede se me olvidó decirte que comentaras el header, de la siguiente forma:
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->
    //header ("Location: aplicacion.php");
    <!--c2--></div><!--ec2-->

    Ahora vuelve y haz lo que te dije vale?? Copia y pega la consulta... y la muestras por acá.

    Saludos :adios:
     
  15. kede

    kede Nuevo usuario

    con esa linea comentada, vuelvo a hacer esto???
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->echo $ssql = "SELECT * FROM usuarios WHERE login='$usuario' and password='$contrasena'"; <!--c2--></div><!--ec2-->
    si es eso me muestra lo mismo...
     
  16. Carxl

    Carxl Nuevo usuario

    Hola de nuevo kede :D

    Qué te muestra en pantalla??

    Si ejecutas la consulta y no te muestra registros pues es que no está un registro con esas condiciones, y pues nunca te va a ingresar...

    Muéstrame la consulta que te arroja en pantalla php vale??

    Saludos
     
  17. kede

    kede Nuevo usuario

    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->MySQL ha devuelto un valor vacío (i.e., cero columnas). (La consulta tardó 0.0003 seg)

    ---consulta SQL:------------------------------
    SELECT *
    FROM usuarios
    WHERE login = 'kede'
    AND PASSWORD = 'mi_contraseña'
    LIMIT 0 , 30 <!--c2--></div><!--ec2-->

    Me vuelve a mostrar eso...

    Pues no se cual es el fallo entonces, porque el usuario si aparece en la base de datos,...
    <a href="http://www.ridingforfun.es/sql21.jpg" target="_blank"><b><!--coloro:#CC0000--><span style="color:#CC0000"><!--/coloro-->(<u>Captura</u>)<!--colorc--></span><!--/colorc--></b></a>

    Voy a probar con una tabla de usuarios nueva...
     
  18. Carxl

    Carxl Nuevo usuario

    Hola kede... cómo vas??

    Pueba esto:
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->
    $ssql = "SELECT * FROM usuarios WHERE login='{$_POST['usuario']}' and password='{$_POST['contrasena']}'";
    <!--c2--></div><!--ec2-->

    :huh: :huh:
    :D :D

    Saludos :adios:
     
  19. kede

    kede Nuevo usuario

    Ahhh pues ahora poniendo eso me sigue dando login incorrecto pero he encontrado el problema.

    Cuando registro un usuario, me encripta la contraseña, tal que si yo pongo por ejemplo "caloga" me aparece en la tabla asi "seTYlMuml5u7s"
    Si pongo "caloga" no me reconoce, pero si pongo "seTYlMuml5u7s" logea sin problema...
    Ahora sabiendo esto supongo que será mas facil pero... como lo arreglo?? XD

    La verdad el hecho de que aparezca encriptada la contraseña me da igual, pues va a ser una base de datos muy pequeñita y con poquitos usuarios (Igual se registran 20 maximo...) y la seguridad no me preocupa para nada por el momento...igual si crece ya intentaré hacerlo algo mas seguro pero mientras tanto no quiero complicarlo en exceso.

    Como hago para que se guarde sin encriptar el password? o bien que sea capaz de leerlo...

    Gracias Carxl por aguantarme =D
     
  20. Carxl

    Carxl Nuevo usuario

    Hola de nuevo kede...

    Qué tipo de dato es tu password?? varchar??

    Lo que pasa es que en alguna parte de tu código(ya sea con php, con mysql directamente o quizás javascript) estás utilizando un función para encriptar...

    Yo revisaría el código o el sql para ver que sucede...

    Saludos

    PDT: Me alegra que lo hayas solucionado
     
  21. kede

    kede Nuevo usuario

    aha si aora que lo dices creo recordar que lo tengo puesto para que encripte mi contraseña en el php mañana lo miro. Gracias Carxl

    Edito:

    Si, lo acabo de mirar y tengo estas lineas
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->/* Ahora comprovamos que los dos pass coinciden */
    if($pass1!=$pass2) {
    echo "Los passwords deben coincidir<br>";
    echo 'Haz click <a href="registro.html">aquí</a> para volver al formulario';
    } else {
    $pass1=crypt($pass2, "semilla");
    /* Encripatmos el password, con la clave "semilla" */
    $query="INSERT INTO usuarios (login, nombre, apaterno, amaterno, password, email) VALUES ('$login','$nombre','$apaterno', '$amaterno','$pass1','$email')";<!--c2--></div><!--ec2-->

    Supongo que eliminando esto valdria, no??
    <!--c1--><div class='codetop'>CÓDIGO</div><div class='codemain'><!--ec1-->$pass1=crypt($pass2, "semilla"); <!--c2--></div><!--ec2-->

    Mañana pruebo en el pc del trabajo.
    Gracias nuevamente, un saludo!
     


Alojamiento web, Hosting Reseller, Servidores Dedicados - All in Hosting


    
    
    
    
Blog · Sitios amigos: GuiaHosting · Unidominios · Interalta ·