Foros del Web » Programando para Internet » PHP »

Problema con sesión

Estas en el tema de Problema con sesión en el foro de PHP en Foros del Web. Buenas, tengo un problemilla con la autentificación de usuarios a través de sesiones. Lo primero decir que he hecho una búsqueda, pero no he encontrado ...
  #1 (permalink)  
Antiguo 14/04/2003, 13:02
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Problema con sesión

Buenas, tengo un problemilla con la autentificación de usuarios a través de sesiones.

Lo primero decir que he hecho una búsqueda, pero no he encontrado una solución a mi problema.

El caso es que es la primera vez que trabajo con esto de las sesiones y estoy un poco perdido.

quiero hacer algo de autentificación sencillito, y cogiendo como base el "autentificator" de Cluster me he dispuesto a empezar desde el principio.

Tengo éste script:

Código PHP:
<?php
    
    
//comprobamos que se haya accedido a la página a través de un formulario.
    
if (isset($_POST['usuario']) && isset($_POST['pass'])) {


        
//consulta en la Base de datos.
        
mysql_connect ('***''***');  
        
mysql_select_db ('***);
        $query = mysql_query("SELECT nombre,pass FROM usuarios WHERE nombre='".$_POST['usuario']."'");


        //si no se ha devuelto ninguna fila, es que ese usuario no existe.        
        if (mysql_num_rows($query) == 0) {
            echo('
No existe ese usuario');
            exit;
        }
    
        //si el usuario existe metemos sus datos en variables.
        $datos_usuario = mysql_fetch_array($query);

        //Y comprobamos si el password es correcto.
        if ($datos_usuario['
pass'] == $_POST['pass']) {

            echo ('
usuario aceptado');
            session_name('
keysherweb');
            session_start();
            $_SESSION['
usuario']=$datos_usuario['usuario'];
    
            exit;
         } else {
            //en caso de que el pass sea incorrecto...
            echo ('
Contraseña incorrecta');
            exit;
        }
    
    } else {
        // si entra por éste else significa que no se ha llegado a esta página a través del formulario.


        session_name('
kw');        
        session_start();

        if (!isset($_SESSION['
usuario'])) {            
            session_destroy();
            echo ('
acceso incorrectoenviar al login.');
            exit;
        } else {
            echo('
Sesión activapuede pasar a la página que necesita login);
        }
    }

?>
(He omitido el nombre, user... de la base de datos)

Bueno, es algo muy sencillo, para probar, ni siquiera encripto el pass, y va más o menos bien.
El problema está cuando se ha autentificado, cuando quiere acceder a la página da siempre "acceso incorrecto", es decir como si no existiese la sesión.

Ya digo que no entiendo mucho de sesiones todavía, pero ¿dónde puede estar el fallo?

Bueno, a ver si me podeís echar un cablecillo para que siga haciendo cosillas, saludos!
  #2 (permalink)  
Antiguo 14/04/2003, 13:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Hay algunos errores ... :

echo ('usuario aceptado');
session_name('keysherweb');
session_start();
$_SESSION['usuario']=$datos_usuario['usuario'];

Antes de session_start() no puedes enviar nada de HTML al navegador .. y así lo estas haciendo con tu echo "usuario_aceptado" .. si quieres usarlo .. ponlo abajo de session_start()


Tambien .. si te fijas en mi código original de "Autentificator" .. veras que cuando registro la variable en la sesion .. hago un redireccionamiento (header("location ....") ) .. Eso es Necesario, pues las sessiones NO quedan disponibles hasta la próxima petición que se haga .. osese .. hasta por lo menos en ese caso una recarga de la página .. Por eso es necesario recargar la página ya sea automático o manual (con algun link q pongas tu a mano).

He de ahi que siempre entres de tu condicional .. pues la variable de sesion todavía "php no se enteró" que debe usarla ...

En resumen .. tras el registro de la variables en la session por una identificación correcta (el código que te pegue aquí .. ) deberias hacer un "redireccionamiento" .. como mas te guste para que tus variables de session queden disponibles.

Te recomiendo que visites el manual oficial de PHP y leas al respecto sobre el tema "sesiones" .. Hay muchos detalles que debes de conocer si vas a trabajar con ellas .. (sobre todo de directivas de configuración ..)

Un saludo
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 14/04/2003, 13:29
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

Me he fijado en:
Código PHP:
session_name('keysherweb'); 
y en :
Código PHP:
session_name('kw'); 
No suelo usar sesiones, pero mi logica me dice que deberias usar el mismo nombre de sesion si es la misma sesion ¿o no?

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 14/04/2003, 13:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Buena observación Josemi ...

Es cierto, El nombre de la sesion que inicies ha de ser el mismo en el resto de scripts que desees usalo .. sino se considerará como sesion nueva y por ende esa sesion nueva contendrá o no esas variabels que registres ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 14/04/2003, 13:51
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Gracias por responder, Cluster.

He corregido el echo y he después de crear la sesión he puesto un link a esa misma página (valdría con eso para que se activen?¿?)

El caso es que sigue entrando siempre por ese if, y no sé porqué es, lo de recargar la página después de iniciar la sesión no lo entiendo bien, con recargar con F5, o poner un link a sí mismo o algo parecido valdría?

He probado a subie el "Autentificator" y me dá el mismo error, es decir, cuando meto user y pass me sale lo de "Error cod.:1 - Acceso incorrecto!", y no consigo que funcione.

He estado mirando el manual de PHP (siempre lo tengo a mano), pero no me entero de mucho, y estoy muy espeso.

La página la tengo en lycos, así que no sé si será por eso.

También me he fijado que si le doy al link que he puesto justo después iniciar la sesión, dá el mismo mensaje (acceso incorrecto), pero en la url aparece algo así: pag.php?nombre_De_la_sesion= y lo que supongo que será el ID de la sesión (algo he leido en la ayuda, pero como ya he dicho, ando algo torpe hoy, a ver si me lo leo con más calma)

En fin, que me extraña que tampoco funcione el "Autentificator", así que no sé que puede ser....

saludos.

P.D: ahora que lo he leido, sí josemi, fue un error mio al copiarlo, pero cuando hice las pruebas tenían el mismo nombre de sesión

Última edición por Keysher; 14/04/2003 a las 13:54
  #6 (permalink)  
Antiguo 14/04/2003, 14:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
En Lycos no funciona "Autentificator" .. Ya lo comprobé .. hay q modificarlo y ver como Lycos se maneja con las sessiones para que funcione ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 14/04/2003, 14:07
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Bueno, entonces será que he metido la pata en algún sitio, voy a ver si puedo ir descartando cosillas, y a leerme el manual, y si aún así no me entero pediré sopitas por aquí ;P

Venga, un saludo y gracias.
  #8 (permalink)  
Antiguo 14/04/2003, 14:20
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Bueno, parece que lo he solucionado, caambiando los:

$_SESSION['usuario']

por:

$HTTP_SESSION_VARS['usuario']

Y dandome cuenta de un fallo absurdo que había cometido, confundiendome en el nombre de un campo de la tabla xD

Bueno, voy a ver si sigo un poquillo con esto, que se está poniendo interesante, saludos a todo el mundo.
  #9 (permalink)  
Antiguo 14/04/2003, 14:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues .. si vas a trabajar en Lycos te recomendaría que te asegurases de unas cosas:

1) Funciona header("location: unapagina.tal"); ?
(por lo que comprobé yo .. no .. o por lo menos en conjunto con sessiones)

2) Se puede acceder a las variables de servidor via arrays superglobales: $_SERVER .. o hay q usar su equivalente "global" ...

3) Funciona el acceso a sessiones via los arrays superglobales $_SESSION ? .. o hay q usar session_register() .. (aquí no sé .. ya me aburrí de comprobarlo).

Bueno, para tus pruebas te recomiendo que uses:

error_reporting(E_ALL);

Al principio de tus scripts de pruebas .. así veras todos los errores y notices que te dé PHP... Porqué no se si era Lycos o iespana que tienen desactivado el reporte de errores .. así q mas confuso se hace ver donde puede estar el problema ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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:34.