Foros del Web » Programando para Internet » PHP »

Error En Sesion

Estas en el tema de Error En Sesion en el foro de PHP en Foros del Web. Hola A Todos, Haber Si Alguien Me Ayuda A Ver Que Esta Pasando... Tengo Una Pagina Web Con Autenticacion De Usuarios Y Todo Funciona Ok, ...
  #1 (permalink)  
Antiguo 18/10/2005, 18:49
 
Fecha de Ingreso: diciembre-2003
Mensajes: 42
Antigüedad: 20 años, 4 meses
Puntos: 0
Error En Sesion

Hola A Todos,
Haber Si Alguien Me Ayuda A Ver Que Esta Pasando...
Tengo Una Pagina Web Con Autenticacion De Usuarios Y Todo Funciona Ok, Pero Hay Ocasiones En Las Cuales Al Momento De Logearme Aparesco Autenticado Como Un Usuario Distinto Al Que Debiese Ser... Es Decir La Informacion Asociado Al Usuario Es De Otro Usuario Distinto Al Que Se Logeo

Alguien Sabeque Puede Pasar?


Saludos,
Zednem
  #2 (permalink)  
Antiguo 18/10/2005, 19:13
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Quizá el sistema guarda una cookie y toma la autentificación de ahí. ¿no apareces como usuario válido al abrir en un principio la web?, ¿tienes acceso total a las opciones del "otro usuario" o solo es el "nombre" el erroneo?.

Deberías aclarar qué método empleas y el código empleado por lo menos... Lee las recomendaciones del foro (enlace en mi firma).

Un saludo!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 18/10/2005, 19:26
Avatar de TortugaChat  
Fecha de Ingreso: julio-2004
Ubicación: Coatzacoalcos, Veracruz, México.
Mensajes: 150
Antigüedad: 19 años, 8 meses
Puntos: 0
Cita:
Iniciado por ZedNem
....La Informacion Asociado Al Usuario Es De Otro Usuario Distinto Al Que Se Logeo

Alguien Sabeque Puede Pasar?....


Lo que puede pasar es que al momento de hacer la verificación del usuario no hay problema, pero cuando lees la información pertinente puede haber un error en el código, de tal manera que lees los datos del siguiente registro.

Tal vez viendo un poco de tu código de logueo podamos ayudarte un poquitín.


Saludos.
  #4 (permalink)  
Antiguo 18/10/2005, 19:57
 
Fecha de Ingreso: diciembre-2003
Mensajes: 42
Antigüedad: 20 años, 4 meses
Puntos: 0
Bueno aca les dejo mas informacion...

Primero, aca esta la asignacion de valores a las variables de sesion PHP al momento de logearse el usuario

Código PHP:

$sql 
"SELECT * FROM $sql_tabla WHERE email ='".$_POST['email']."' AND estado = 'A'";
//echo $_POST['password'];
$usuario_consulta mysql_query($sql) or die(header ("Location:  $redir?error_login=1"));

 
// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
 
if (mysql_num_rows($usuario_consulta) != 0) {

// le damos un mobre a la sesion.
    
session_name($usuarios_sesion);
     
// incia sessiones
    
session_start();

    
// Paranoia: decimos al navegador que no "cachee" esta página.
    
session_cache_limiter('nocache,private');
    
    
// Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas autentificadas.

    
$_SESSION['usuario_id']            = $usuario_datos['id'];
    
$_SESSION['usuario_email']        = $usuario_datos['email'];
    
$_SESSION['usuario_estado']        = $usuario_datos['estado'];
    
$_SESSION['usuario_nombre']        = $usuario_datos['nombre'];
    
$_SESSION['usuario_apellido']    = $usuario_datos['apellido'];
    
$_SESSION['usuario_email']        = $usuario_datos['email'];
    
$_SESSION['usuario_password']    = $usuario_datos['password'];
    
$_SESSION['usuario_foro']        = $usuario_datos['foro'];
    
$_SESSION['usuario_noticias']    = $usuario_datos['noticias'];
    
$_SESSION['usuario_calendario']    = $usuario_datos['calendario'];
    
$_SESSION['usuario_guru']        = $usuario_datos['guru'];
    
$_SESSION['usuario_reportes']    = $usuario_datos['reportes'];
    
$_SESSION['usuario_forex']        = $usuario_datos['forex'];
    
$_SESSION['usuario_analisis']    = $usuario_datos['analisis'];
    
$_SESSION['usuario_validado']    = $usuario_datos['validado']; 
Luego aca va el codigo que verifica al usuario si tiene sesion activa mientras navega por la pagina...

Código PHP:
if ($gestor opendir('/tmp')) {
        while (
false !== ($archivo readdir($gestor))) {

            if(
substr($archivo,0,5) == "sess_") {
                
                if(
is_readable("/tmp/".$archivo)) {
                    
//tengo acceso...
                    
                    
$sess_id substr($archivo5);
                    
session_id($sess_id);
                    
session_start();
                    
session_id($sess_id);
                    
                    
                    
$usuario_id $_SESSION["usuario_id"];
                    
                    
$hora strtotime(date("Y-m-d h:i:s"));
                                                    
                    
$sql "SELECT hora FROM usuario
                                WHERE id = $usuario_id"
;
                    
$result $db->consulta($sql);
                    
                    
$old_hora strtotime($result[0]['hora']);
                    
                    if((
$hora-$old_hora) > 60 || ($hora-$old_hora) < 0) {
                        
                        
$hora date("Y-m-d h:i:s",0);
                        
$sql "UPDATE usuario 
                                    SET hora = '$hora',
                                        validado = 0 
                                    WHERE id = "
.$_SESSION["usuario_id"];
                        
                        
                        
                        
$db->update($sql);
                        
session_unset();
                        
session_destroy();
                        
                    }
                }
            }

        }
    }

    
//ob_end_flush();
    
closedir($gestor); 

Haber si tengo suerte....
  #5 (permalink)  
Antiguo 18/10/2005, 20:09
Avatar de TortugaChat  
Fecha de Ingreso: julio-2004
Ubicación: Coatzacoalcos, Veracruz, México.
Mensajes: 150
Antigüedad: 19 años, 8 meses
Puntos: 0
Código PHP:
$sql "SELECT * FROM $sql_tabla WHERE email ='".$_POST['email']."' AND estado = 'A'"

Me parece que estás autentificando a un usuario tomando como base el email que ingresó y que su estado sea "A".

Me parece fuera de lo común, supondría que debes hacerlo con nombre de usuario y una contraseña. O email y contraseña.

Aparte, verificas que el resultado de tu consulta sea DIFERENTE DE CERO. Pero, ¿qué pasa si por extraño que parezca, existen DOS o más usuarios con el mismo email? ¿verificas este dato al dar de alta al usuario?

Me parece que lo correcto es verificar que existe uno y solo un usuario con los datos con los cuales verificas.

El resto, pues, primero hay que descartar lo otro.


Por cierto, tomas los datos para la sesión de la variable $usuario_datos,
¿ no debería ser de $usuario_consulta ?

Aunque me parece que tendría que ser algo así como

Código PHP:
$_SESSION['usuario_id']=mysql_result($usuario_consulta ,0,"id"); 

Última edición por TortugaChat; 18/10/2005 a las 20:17
  #6 (permalink)  
Antiguo 19/10/2005, 06:05
 
Fecha de Ingreso: diciembre-2003
Mensajes: 42
Antigüedad: 20 años, 4 meses
Puntos: 0
AL MOMENTO DE REGISTRARME VERIFICO QUE NO HAYA OTRO USUARIO CON LA MISMA DIRECCION DE CORREO

Y TOMO LOS DATOS DESDE $USUARIO_DATOS POR QUE ES EL NOMBRE DEL ARREGLO QUE LE ASIGNO A LA CONSULTA AL MOMENTO DE RECORRER EL RESULTADO DE ESTA...

Código PHP:
$usuario_datos mysql_fetch_array($usuario_consulta); 
  #7 (permalink)  
Antiguo 19/10/2005, 08:17
Avatar de TortugaChat  
Fecha de Ingreso: julio-2004
Ubicación: Coatzacoalcos, Veracruz, México.
Mensajes: 150
Antigüedad: 19 años, 8 meses
Puntos: 0
Pero esa linea no está en el primer código que pegaste. ¿en donde la encuentro?
  #8 (permalink)  
Antiguo 19/10/2005, 08:30
 
Fecha de Ingreso: diciembre-2003
Mensajes: 42
Antigüedad: 20 años, 4 meses
Puntos: 0
SORRY ACA VA...


Código PHP:
$sql "SELECT * FROM $sql_tabla WHERE email ='".$_POST['email']."' AND estado = 'A'";
//echo $_POST['password'];
$usuario_consulta mysql_query($sql) or die(header ("Location:  $redir?error_login=1"));

 
// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
 
if (mysql_num_rows($usuario_consulta) != 0) {

    
// eliminamos barras invertidas y dobles en sencillas
    
$login stripslashes($_POST['email']);
    
// encriptamos el password en formato md5 irreversible.
    
$pass $_POST['password'];

    
// almacenamos datos del Usuario en un array para empezar a chequear.
     
$usuario_datos mysql_fetch_array($usuario_consulta);
  

    
    
// chequeamos el nombre del usuario otra vez contrastandolo con la BD
    // esta vez sin barras invertidas, etc ...
    // si no es correcto, salimos del script con error 4 y redireccionamos a la
    // página de error.
    //echo "login = ".$login."<br>";
    //echo "password =".$pass."<br>";
    
    
    
if ($login != $usuario_datos['email']) {
           
Header ("Location: salir.php?error_login=4");
        exit;}

    
// si el password no es correcto ..
    // salimos del script con error 3 y redireccinamos hacia la página de error
    
if ($pass != $usuario_datos['password']) {
        
Header ("Location: salir.php?error_login=3");
        exit;}

    
/*
    if($usuario_datos['validado'] == 1) {
        Header ("Location: salir.php?error_login=6");
        die();
        exit;
    }
    */
    
        
        
    // Paranoia: destruimos las variables login y password usadas
    
unset($login);
    unset (
$pass);

    
// En este punto, el usuario ya esta validado.
    // Grabamos los datos del usuario en una sesion.
    
    // le damos un mobre a la sesion.
    
session_name($usuarios_sesion);
     
// incia sessiones
    
session_start();

    
// Paranoia: decimos al navegador que no "cachee" esta página.
    
session_cache_limiter('nocache,private');
    
    
// Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas autentificadas.

    
$_SESSION['usuario_id']            = $usuario_datos['id'];
    
$_SESSION['usuario_email']        = $usuario_datos['email'];
    
$_SESSION['usuario_estado']        = $usuario_datos['estado'];
    
$_SESSION['usuario_nombre']        = $usuario_datos['nombre'];
    
$_SESSION['usuario_apellido']    = $usuario_datos['apellido'];
    
$_SESSION['usuario_email']        = $usuario_datos['email'];
    
$_SESSION['usuario_password']    = $usuario_datos['password'];
    
$_SESSION['usuario_foro']        = $usuario_datos['foro'];
    
$_SESSION['usuario_noticias']    = $usuario_datos['noticias'];
    
$_SESSION['usuario_calendario']    = $usuario_datos['calendario'];
    
$_SESSION['usuario_guru']        = $usuario_datos['guru'];
    
$_SESSION['usuario_reportes']    = $usuario_datos['reportes'];
    
$_SESSION['usuario_forex']        = $usuario_datos['forex'];
    
$_SESSION['usuario_analisis']    = $usuario_datos['analisis'];
    
$_SESSION['usuario_validado']    = $usuario_datos['validado'];
    
    
    
//actualizo la fecha y el estado de validacion
    
$fecha date("Y-m-d h:i:s");
    
$sql2 "UPDATE usuario SET hora = '".$fecha."', validado = 1, session =  'sess_".session_id()."' WHERE id = ".$usuario_datos['id'];
    @
$result mysql_query($sql2);
    
mysql_free_result($usuario_consulta);
    
mysql_close($db_conexion);
        
    
    
$bizUsuario = new BIZ_UsuarioHistorico();
    
$envio $bizUsuario->insertUsuarioHistoricoBiz($_SESSION['usuario_id'], date('Y-m-d H:i:s'), $_SERVER['REMOTE_ADDR']);
    
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
    
    
@error_log($sql."\n"3"errorlog.log");
    @
error_log($sql2."\n"3"errorlog.log");
    
    
    
$pag=$_SERVER['PHP_SELF'];
    
Header ("Location: index.php?");
    exit;
    
   } else {
      
// si no esta el nombre de usuario en la BD o el password ..
      // se devuelve a pagina q lo llamo con error
      
Header ("Location: salir.php?error_login=2");
      exit;
   } 
  #9 (permalink)  
Antiguo 19/10/2005, 08:42
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 11 meses
Puntos: 0
A primera vista, me arece que el problema puede venir de que en tu segundo script no inicias la sesión.

prueba poniendo
session_start();
al principio del segundo script.
  #10 (permalink)  
Antiguo 19/10/2005, 08:50
 
Fecha de Ingreso: diciembre-2003
Mensajes: 42
Antigüedad: 20 años, 4 meses
Puntos: 0
Ok, Gracias Lo Probare... Lo Unico Malo Del Sitio Es Que Funciona Sin Inconvenientes Por Lo General, Pero Hay Ocasiones En Que Una Persona Se Puede Logear Desde Un Equipo Muy Lejos Y Cuando Ingresa Aparece Logeado Como Un Usuario Que El No Es...

Podra Ser Algun Problema De Php Y Los Archivos De Session Que Este Guarda En El Servidor....

Se Pueden Controlar Estos?

Saludos,
  #11 (permalink)  
Antiguo 19/10/2005, 08:51
 
Fecha de Ingreso: diciembre-2003
Mensajes: 42
Antigüedad: 20 años, 4 meses
Puntos: 0
Cita:
Iniciado por ZedNem
Ok, Gracias Lo Probare... Lo Unico Malo Del Sitio Es Que Funciona Sin Inconvenientes Por Lo General, Pero Hay Ocasiones En Que Una Persona Se Puede Logear Desde Un Equipo Muy Lejos Y Cuando Ingresa Aparece Logeado Como Un Usuario Que El No Es...

Podra Ser Algun Problema De Php Y Los Archivos De Session Que Este Guarda En El Servidor....

Se Pueden Controlar Estos?

Saludos,
SE ME OLVIDO COLOCAR QUE REVISE EL TEMA DE LOS MAIL... PERO NO TENGO NINGUNA COINCIDENCIA ENTRE LOS MAILS DE LOS USUARIOS REGISTRADOS...
  #12 (permalink)  
Antiguo 19/10/2005, 08:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mmm

Cita:
if ($gestor = opendir('/tmp')) {
while (false !== ($archivo = readdir($gestor))) {

if(substr($archivo,0,5) == "sess_") {

if(is_readable("/tmp/".$archivo)) {
//tengo acceso...
Esa verificación "física" de tu archivo de sesión no deberías hacerlo .. de hecho en la mayoría de servicios de hosting (compartido o no) no vas a poder acceder al directorio /tmp/ o donde PHP almacene sus sesiones para ver esa información.

Podrías definir tu própio directorio para almacenar las sesiones:
session_save_path()


La validación de tu usuario activo en tu sistema .. simplemente lo podrías hacer con:

Código PHP:
session_start();
if (isset(
$_SESSION['alguna de tus variables'])){
// está autentificado ..

El tiempo de expiración de tu sesión lo determina PHP en su directiva:
session.gc_maxtimelife

Eso es muy genérico y con poco control (es cierto) .. pero, si tu quieres tener un mejor control de tu sesión activa, puedes usar otros métodos, pero NO ir a mirar "fisicamente" el archivo de sesión creado en el servidor por PHP. Eso no te asegura que una sesión esté activa o no .. pues PHP usa un término que denomina "garbage" (basura) para pasar una sesión al estado de "inactivo" en espera de ser físicamente borrado el archivo según determina otra directiva de php.ini, en ese momento, .. el archivo existe todavía y la sesión no es válida.

Si quieres un control más "fino" de sesiones .. podrías usar algunas implementaciones como:
http://www.phpclasses.org/browse/package/1773.html
(en ese sitio hay más para que las pruebes), Fijate como trabajan .. almacenan y gestionan datos/SID en base de datos para ofrecer todo ese tipo de funcionalidades como mejor control del tiempo de expiración .. contar sesiones activas .. etc ..

Un saludo,
  #13 (permalink)  
Antiguo 19/10/2005, 09:08
 
Fecha de Ingreso: diciembre-2003
Mensajes: 42
Antigüedad: 20 años, 4 meses
Puntos: 0
Gracias Por El Dato... Pero Podria Ser Por Esto Que Las Sesiones Se Esten Mareando Entre Los Distintos Usuarios?
  #14 (permalink)  
Antiguo 19/10/2005, 09:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por ZedNem
Gracias Por El Dato... Pero Podria Ser Por Esto Que Las Sesiones Se Esten Mareando Entre Los Distintos Usuarios?
Por mi parte no he evaluado 100% como trabaja tu código .. pero podría estar el error ahí.

Reduce tu usu de sesiones al mínimo .. y ve como trabaja, así vas descartando problemas.

Un saludo,
  #15 (permalink)  
Antiguo 20/10/2005, 09:04
 
Fecha de Ingreso: diciembre-2003
Mensajes: 42
Antigüedad: 20 años, 4 meses
Puntos: 0
Ahora si que quede colgado... me han dado un nuevo dato del error y no se me ocurre que puede estar pasando....

me dicen que cuando estan navegando autentificados previamente, se les cambia el usuario durante la navgeacion esto si que esta raro...
  #16 (permalink)  
Antiguo 20/10/2005, 09:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por ZedNem
Ahora si que quede colgado... me han dado un nuevo dato del error y no se me ocurre que puede estar pasando....

me dicen que cuando estan navegando autentificados previamente, se les cambia el usuario durante la navgeacion esto si que esta raro...
Yo insisto .. ¿por qué no usas el sistema de sesiones clásico de PHP? (sin ese juego con los "sess_xxxx" para determinar tiempos de expiración?...

Un saludo,
  #17 (permalink)  
Antiguo 20/10/2005, 11:54
 
Fecha de Ingreso: diciembre-2003
Mensajes: 42
Antigüedad: 20 años, 4 meses
Puntos: 0
YO creo que esa es la mejor solucion... aunque habra que reacer el sistema de autenticacion.... en fin thst's life ....
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 07:16.