Foros del Web » Programando para Internet » PHP »

autneticador temporal

Estas en el tema de autneticador temporal en el foro de PHP en Foros del Web. Buno amigos, estoy teniendo un problema, sucede que despues de que el usario esta mucho tiempo en una pagina que requiere el autenticar.... y se ...
  #1 (permalink)  
Antiguo 24/03/2005, 11:07
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
autneticador temporal

Buno amigos, estoy teniendo un problema, sucede que despues de que el usario esta mucho tiempo en una pagina que requiere el autenticar.... y se trata de mover a otra de iguale socndiciones, me pide de nuevo la contraseña, al parecer el error es de que las seseiones caducan rapidamente, sin embargo, he tratado de modificar esto asi:
session_cache_expire('1');

justo antes de que se inicie sesion y no funciona, es decir con estas caracteristicas, el usuario inicia sesion, e inmediatamente expira, cierto?
pero no es asi, sigue navegando normalamente, pero al cabo de un rato me pide de nuevo autenticarse....... a que se debe esto, como lo corrijo, aca dejo el codigo normalmente de mi autenticador.
Código PHP:
<?php
require ("data.cfg.php");
$tabla "usuarios";
$user $_POST['user'];
$pass md5($_POST['pass']);

if (isset(
$_POST['user']) & isset($_POST['pass'])){
    if (
$_SERVER['HTTP_REFERER'] == ""){
echo 
"Error 300: Esta intentando acceder de una forma no valida";
exit;
}
    
// sacamos los datos de la base dedatos para hacer comprobaciond eregistro
    
$querymysql_query("SELECT id, user, pass FROM $tabla WHERE (user='$user')");
    
    
    
//1
    
if (mysql_num_rows($query) != 0){
             
$datos mysql_fetch_array($query);
 
mysql_free_result($query);



//3
if ($pass == $datos[2]){ 
//varibles de sesion
    
session_name("sess");
    
session_start();
   
session_cache_limiter('nocache,private');
    
    
$_SESSION['id']= $datos[0];
    
$_SESSION['user']=$datos[1];
    
$_SESSION['pass']=$datos[2];
//fin variables de sesion

    
header('Location:' $_SERVER["PHP_SELF"].'?');
    exit;
}

//e1
else{
 echo 
"Contraseña invalida";

exit;
}

}
//e3
    
else{
    echo 
"Error 301: Su nombre de usuario es incorrecto";
     
mysql_free_result($query);
    exit;
    }
}

    
    
//e4
    
else{
    
// -------- Chequear sesión existe -------

// usamos la sesion de nombre definido.
session_name("sess");
// Iniciamos el uso de sesiones
session_start();

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['user']) && !isset($_SESSION['pass'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die (
"Error cod.: 2 - Acceso incorrecto!");
header("location:http://www.qhseinternational.com/ios/index.php");
    }
}




?>
__________________
SEO en Medellin
  #2 (permalink)  
Antiguo 24/03/2005, 13:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
y se trata de mover a otra de iguale socndiciones, me pide de nuevo la contraseña, al parecer el error es de que las seseiones caducan rapidamente, sin embargo, he tratado de modificar esto asi:
session_cache_expire('1');
No, no es esa la función ni la directiva que controla el tiempo de expiración de una sesión. Lo define: session.gc_maxtimelife (de tu php.ini) .. por defecto está en 1440 segundos (24 minutos). Pero este valor por sí sólo no fija que la sesión sea válida .. pues depende directamente de como propagues el SID (Identificador único de sesión) en tu aplicación. Por el código -similar o igual en algunas partes- a "Autentificator" (mi script de validación de usuarios) que usas .. el SID se está asumiendo que lo vas a propagar por Cookies. Las cookies en la propagación del SID también definen tiempo de expiración .. normalmente se usa a "0" .. lo cual implica que al cerrar la última ventana del sitio .. la sesión muere (mejor dicho el SID que queda en la cookie).


Un saludo,
  #3 (permalink)  
Antiguo 24/03/2005, 16:16
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
asi es cluster

mira el codigo que te enseño es el mismo de tu autenticador solo que adaptado a mis necesidades, espero no te moleste, en el escript original estan los derechos :P semicombinados

por otro lado, no entiendo cuando dices que sugieres que el sid se propaga por cookies, yo lo unico que utilizo es es ese escript y en las paginas que quiero que soliciten contraseña hago un llamado, es decir require() en ningun momento utilizop las funciones de manejo de cookies

el problema que se me presenta es que aproximadamente a los 10 minutos de estar en la pagina y dejarla quieta, me pide autenticarme de nuevo, no se ocmo corregirlo, quizas me puedas ayudar.
__________________
SEO en Medellin
  #4 (permalink)  
Antiguo 24/03/2005, 16:24
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
lo que dice Cluster es que el SID tienes que obtenerlo de alguna parte, o lo haces por url (GET, ej: http://www.tusitio.com.ar/index.php?...xxxxxxxxxxxxxx) o lo haces con cookies... sino, obviamente, tu sesion se terminará ni bien cambies de pagina (ya que comenzara con otro SID).

O eso creo =P
__________________
I Love Programming...
  #5 (permalink)  
Antiguo 24/03/2005, 21:50
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
no se... simplemente utilizo ese codigo.....
y se que si se propaga el SID por que efectivamente puedo navegar por el sitio sin que me pida autenticar, pero despues de cierto rato ya me lo pide...
lo que no se es en ese escript como se propaga el SID

y por que me pide autenticar despues de un rato
__________________
SEO en Medellin
  #6 (permalink)  
Antiguo 24/03/2005, 22:05
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
me gustaria saber tambien

quiciera saber eso de que las sesiones caducan a los 24 minutos por defecto, es decir que a partir de que una sesion es creada muera a los 24 minutos, o es si permanece inactiva, es decir el usuario no navega..... no actuliza la pagina para que se vuelva a brir la sesion.

otra cosa::::: me sigue pidiendo autenticacion al poco tiempo de estar navegando
__________________
SEO en Medellin
  #7 (permalink)  
Antiguo 26/03/2005, 11:11
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
hay alguna

necesito una respuesta....por que pasa eso.
como se esta propagando el sid en el script, creo que es por cookies, pero no veo funicones de manejo de cookies, asi es que me parece raro
__________________
SEO en Medellin
  #8 (permalink)  
Antiguo 26/03/2005, 13:31
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
Es que creo que las sesiones generan automaticamente una cookie (si es que el usuario tiene esta opcion activada) para propagarse, el tema debe ser que no define un tiempo muy elevado y por ello se destruye antes de lo pensado...
__________________
I Love Programming...
  #9 (permalink)  
Antiguo 26/03/2005, 15:08
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
y habria alguna forma de modificar ese tiempo

Hay alguna forma de modificar ese tiempo para evitar que se destruyan.... tan pronto
__________________
SEO en Medellin
  #10 (permalink)  
Antiguo 26/03/2005, 15:49
 
Fecha de Ingreso: marzo-2005
Ubicación: cd. victoria, tamps, mexico
Mensajes: 53
Antigüedad: 19 años
Puntos: 0
Porque mejor no usas cookies, y alli si puedes seleccionar el tiempo que quieres que esten los usuarios....

En este caso, cambia lo siguiente de tu codigo
Código PHP:


if ($pass == $datos[2]){ 

/*
se crea la cookie en vez de sesion
es lo mismo, se hace una cookie con nombre "id", y el tiempo le ponemos 3600 segundos, es decir, 1 hora ya que.... 60 seg. x 60 minutos = 3600 seg., asi puedes tu configurar el tiempo que quieres que dure la cookie por ejemplo si quieres que dure 3 horas pues multiplicas 3600 seg (que viene siendo una hora) x 3 horas = 10800 seg, y entonces en vez de poner 3600 pones, 10800 despues del caracter "+", el valor + viene siendo el tiempo positivo, es decir, el tiempo que quieres que viva tu cookie, en negativo es lo contrario...  :-) 

Y asi creamos las 3 cookies con las 3 mismos valores...

Para hacer cookies, aqui esta una breve explicacion...

setcookie("nombredelacookie","valordelacookie",tiempodeexpiracion);

Las cookies soon como variables, pero estas tienen un tiempo limitado de vida, es decir, duran el tiempo que tu digas, en el valor de la cookie es lo que quieres que tenga tu cookie puede ser cadena, variable, o numeros.... , y el tiempo de expiracion, es cuanto quieren que duren, se pone de la sig. manera .... time()+3600   <--- en este caso 3600 seg. son 1 hora porque 60 seg x 60 min = 3600 seg.... y el nombre de la cookie, es el nombre que le quieras asignar, por ejemplo.... usuario,  id, nose lo que tu deesees, recuerda... que si la cookie la creaste por ejemplo en index.php, para poder destruirla tienes que destruirla ahi mismo en index.php o hacer otro archivo y destruirla., pero tiene que ser en la misma carpeta, no puedes destruir por ejemplo la cookie de ..... admin/index.php  en  articulos.php, ¿porke? porke asi lo dice el manual de PHP, tienes que destruirla dentro de la carpeta admin/     simple y fasil ... y asi no te complicas la vida con sessiones
*/

setcookie("id","$datos[0]",time()+3600);
setcookie("user","$datos[1]",time()+3600);
setcookie("pass","$datos[2]",time()+3600);

    
header('Location:' $_SERVER["PHP_SELF"].'?'); 
    exit; 


/*
Ahora pasamos a la comprobacion, para saber si la cookie existe, pues simple, aqui te tengo el codigo...
*/

if(!($HTTP_COOKIE_VARS["user"]) or !($HTTP_COOKIE_VARS["pass"])){

/*Entre menos tiempo en segundo se le ponga, mas rapido expira la cookie, en este caso pusimos 30 segundos..., igual con las demas cookies*/

setcookie("user","adios!!",time()+30);
setcookie("pass","adios!!",time()+30);
setcookie("id","adios!!",time()+30);
header("location:http://www.qhseinternational.com/ios/index.php"); 

Y eso es todo, espero que te haya servido de algo... SALUDOSS
  #11 (permalink)  
Antiguo 26/03/2005, 17:54
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
de ser asi

de ser asi, entonces no se necesitaria sesiones, lo que puede suceder con tu codigo es lo siguiente :
1. queda el sistema inseguro, puedo que entonces alguien crea esas tres cookies y ya puede entrar mi sistema, ademas de que no se tendir al individualizacion de los usurios.
2. si se grabara en cada cookie el valor correspondiente es decir en la cookie user el valor user, en la cookie pass el valo pass en MD5 y en id el valor id puede sucer lo siguiente.
1. que alguien coja el user y el pass de las cookies y vulnere la seguridad del user.
2. que ademas se tendria que hacer una consulta a la base de datos cada ves que se ingrese a una pagina autenticada.
de todas amneras muchas gracias por interesarte
bueno necesito una solucion, agradeceria cualquier repuesta
__________________
SEO en Medellin
  #12 (permalink)  
Antiguo 26/03/2005, 19:20
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
... la cookie solo guarda la información, siempre que el usuario ingresa al sitio tu tendrias que comparar esa información con la de la base de datos para saber si el usuario existe o no...

Si se usa bien es igual de "seguro" que una sesion, el unico inconveniente con las cookies es que no todos los navegadores las aceptan (segun sus configuraciones), pero eso de la inseguridad... miles de sitios "importantes" usan cookies para tareas de configuración y demás.. un ejemplo?, google, yahoo, el mismo php.net... todo es inseguro o seguro según la forma en que se usa.
__________________
I Love Programming...
  #13 (permalink)  
Antiguo 27/03/2005, 00:15
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
bueno eso si

pero lo que no quiero es hacerle tantos PIN a la base de datos, es decdir lo que me interesa en el momento es saber como rayo se esta propagando el SID en ese codigo?
__________________
SEO en Medellin
  #14 (permalink)  
Antiguo 28/03/2005, 10:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mafina ..

No sé si has leido la documentación oficial de PHP sobre sesiones:
www.php.net/session

Ahí se habla de que es el SID ...y de como funcionan las sesiones.

El SID como ya te han intentado aclarar se puede propagar de dos formas: URL y cookies. Cuando se dice "cookies" es PHP el que genera esa cookie (por eso no ves ninguna función "settcookie()" por ahí en el código).

Que el SID se propague de una forma u otra lo define el nunca bien ponderado y dichoso php.ini .. ahí tienes todassss las directivas que definen -como- funcionan las sesiones en tu servidor.

Si yo te digo que en mi script original "Autentificator" que estás tomando como base el SID se ha de propagar el COOKIES!, es por qué ni YO ni a tí en tu aplicación se menciona para nada que tengas que propagar el SID en el URL (propagar=hacer llegar al script que redireccionas tal variable) ...

Por eso, lo primero que debes hacer es conocer la configuración de sesiones (php.ini) sus directivas y que hace cada una.

En ese código como no se vé como lo haces tu .. dependes exclusivamente de la configuración de PHP.

Cuando PHP propaga el SID en el URL de forma automática (session.use_trans_sid = 1) .. es PHP quien reescribe ciertos tag's HTML para añadir el SID (constante que es) .. Pero, no lo hace en algunos casos como por ejemplo: header ("Location: ....") ni en javascript (al abrir una ventana .. etc) .. Por eso .. lo más sencillo y seguro es forzar/dejar a que PHP propague el SID en cookies (session.use_cookies = 1 )

Te recomiendo encarecidamente leer la documentación oficial de PHP sobre sesiones. Cualquier cosa que no entiendas .. preguntala, pero no exigas que te expliquemos un comportamiento de una aplicación en un determinado servidor sin conocer la configuración que usas sobre sesiones ni ver TODO tu código. Digo todo .. por qué si por ejemplo en algún momento en algún script te dejas "session_start()" (o el famoso "require()" de aut_verifica.inc.php que lo incluye) .. la sesión no se continua (el SID se pierde por qué no iniciastes el uso de sesiones) así que todo acceso a variables de sesión que pudieras hacer ahí NO te funcionará).


Un saludo,
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 16:58.