Foros del Web » Programando para Internet » PHP »

Como optimizar autentificacion

Estas en el tema de Como optimizar autentificacion en el foro de PHP en Foros del Web. HOla, a ver si me podeis ayudar, porque tengo un sistema de autentificacion que me va muy lento, y lo he proyado ya en tres ...
  #1 (permalink)  
Antiguo 11/11/2008, 11:02
Avatar de javiro  
Fecha de Ingreso: febrero-2006
Mensajes: 48
Antigüedad: 18 años, 2 meses
Puntos: 1
Busqueda Como optimizar autentificacion

HOla, a ver si me podeis ayudar, porque tengo un sistema de autentificacion que me va muy lento, y lo he proyado ya en tres distintos servidores y en todos tarda como mas de 70 segundos en hacer el login.

El sistema es un formulario de acceso con los campos de user y password y ese formulario se envia a control_usuario.php donde se comprueban esos datos con la base de datos:

Código PHP:
###control_usuario.php###
<?php
include("../config.php"); //conecta con la base de datos

$query mysql_query("SELECT * FROM usuarios WHERE user = '".$_POST["usuario"]."' AND nivel < 3"); 

if(
$row mysql_fetch_array($query)){
    if (
$_POST["usuario"] == $row['user'] && (md5($_POST["contrasena"]) == $row['pw'])){
        
//usuario y contraseña válidos
        //defino una sesion y guardo datos
        
session_start();
        
$_SESSION["autentificado"] = "SI";
        
$_SESSION["nombre_user"] = $row['nombre'];
        
$_SESSION["nivel"] = $row['nivel'];
        
$_SESSION["pw"] = $row['pw'];
        
$_SESSION["id_usuario"] = $row['id_usuario'];
        
header ("Location: ".$url."nvc/index2.php"); //redirige a la aplicacion restringida porque el usuario ya está autentificado
        
exit();    
    }else{
        
//la contraseña no coincide y redirige de nuevo al formulario
        
header("Location: ".$url."nvc/index.php?nopass");
        exit();
    }
}else{
    
//no existe el usuario y redirige de nuevo al formulario
    
header("Location: ".$url."nvc/index.php?nopass");
    exit();

?>
En el el archivo index2.php es la aplicación que está restringida a los usuarios autentificados, y para controlar esto, en la primera linea del archivo hace un include a seguridad.php.

Código PHP:
###seguridad.php###
<?php
//Inicio la sesión
session_start();

//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if (!isset($_SESSION["autentificado"]) || $_SESSION["autentificado"] != "SI" || $_SESSION["nivel"]>2) {
    
//si no existe, envio a la página de autentificacion
    
header("Location: index.php");
    
//ademas salgo de este script
    
exit();
}    
?>
Que se le prodria hacer para que no fuera tan lento en un servidor compartido, yo creo que declarar tantas variables de sesion hace que valla lento, pero es necesario que esto sea así.
Salud!!
  #2 (permalink)  
Antiguo 11/11/2008, 11:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como optimizar autentificacion

Cita:
yo creo que declarar tantas variables de sesion hace que valla lento
de hecho ese no es un inconveniente, jamas pienses eso!

tal ves se debe a muchos factores, pero a mi ojo... todo esta perfecto...

incluso la consulta de SQL esta bien, y todo...

de veras, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 11/11/2008, 12:16
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Como optimizar autentificacion

¿70 segundos? Eso es una bestialidad.... ¿es tiempo de carga de la página o de proceso de servidor?

Lo que hay que medir es lo que tarda PHP en hacer todas las operaciones. Para eso puedes utilizar la función microtime, al principio del script y justo al final, para calcular el tiempo REAL.
  #4 (permalink)  
Antiguo 11/11/2008, 12:20
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Como optimizar autentificacion

JAMÁS (Si, en mayúscula a ver si se entiende, ya cansa estar repitiendo lo mismo post por medio :S) usen un dato de entrada en un query como viene.

En vez de:
Código PHP:
$query mysql_query("SELECT * FROM usuarios WHERE user = '".$_POST["usuario"]."' AND nivel < 3"); 
Usá al menos:
Código PHP:
$user = empty($_POST["usuario"]) ? '' mysql_real_escape_string($_POST["usuario"]);
$query mysql_query("SELECT * FROM usuarios WHERE user = '".user."' AND nivel < 3"); 
El resto no hace mucho, aunque la comparación del pass la incluiría en el query y la sacaría de php (estás validando que el usuario y el nivel sean únicos?).

Y van dos notas...que sabrás si adaptarlas o no:

PD: Y si queres sacar variables de session, en vez de $_SESSION["autentificado"] podés usar directamente un empty() sobre $_SESSION["id_usuario"], y yo jamás guardaría el password en una var de session, eso no es seguro por más que el mismo esté en md5.

PD2: Al usar md5 es recomendable usar un hash para simular un encodeado con una key que solo php sabrá (por brutal force podrían romperte un md5 teniendo la session con el psw).

PD3: Todo esto no hace que sea tan lento eh!!, hay un tema de conexión entre vos y tu host seguramente, o directamente por el host. Proba con un html pelado a ver si te responde igual de lento.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 12/11/2008, 03:33
Avatar de javiro  
Fecha de Ingreso: febrero-2006
Mensajes: 48
Antigüedad: 18 años, 2 meses
Puntos: 1
Respuesta: Como optimizar autentificacion

Gracias nicolaspar, por las lecciones sobre seguridad, tienes razon, dejo un agujero de seguridad si no lo hago como tu dices, tienes razón, pero eso no soluciona el problema de la lentitud al hacer el login.

El tiempo que digo, Keysher, es el tiempo total de carga, desde que se pincha el boton de entrar hasta que carga la pagina de la aplicacion cuando se está autentificado.
Se seguro que está relentizando el sistema de login porque cuando le quito el sistema de autentificacion, del formulario a la aplicacion entra al instante, igual con el html pelado que va rapidisimo.

Creo que el que redirija varias veces hace el servidor lento, el proceso de login es el siguiente:

index.php (formulario de acceso) -->> control_usuario.php -->> index2.php (aplicacion)

Alguien sabe otro sistema de login que no le de este problema??
  #6 (permalink)  
Antiguo 12/11/2008, 06:25
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Como optimizar autentificacion

Por supuesto, eran solo comentarios para que tengas en cuenta.
Con el tema del tiempo: no debería pasarte eso.

Tratemos de encontrar donde está el problema.
La db está en el mismo server? Hacete un php que tenga un simple query (select * from tbl) y recorrelo, eso no debería demorar (con pocos registros).

1- El archivo config.php que continene?
2- La tabla de usuarios tiene muchos registros?

PD: Fijate de hacerle un repair y optimize a las tablas, por si acaso.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #7 (permalink)  
Antiguo 12/11/2008, 07:16
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Como optimizar autentificacion

No sé si lo que voy a comentar tiene algún sentido, pero... ¿Cabe alguna posibilidad de que ese retardo tan notable se deba a que en el flujo de tu proceso estés dando saltos cíclicos con las redirecciones o tengas mal definido algún bucle... y eso te provoque un "stand-by" hasta que caduca el tiempo de ejecución del script (con el tiempo marcado según la configuración de php)?

Un saludo.
  #8 (permalink)  
Antiguo 12/11/2008, 08:09
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Como optimizar autentificacion

Si, por supuesto que los "loops infinitos" son válidos!
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #9 (permalink)  
Antiguo 12/11/2008, 08:24
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Como optimizar autentificacion

Si quieres ahondar un poco más en donde se pierde el tiempo puedes usar lo que te aconsejé en el primer post: microtime, haces capturas del tiempo inicial y luego vas capturando tiempos intermedios... al final podrás calcular dónde se pierde más tiempo.
  #10 (permalink)  
Antiguo 12/11/2008, 10:13
Avatar de javiro  
Fecha de Ingreso: febrero-2006
Mensajes: 48
Antigüedad: 18 años, 2 meses
Puntos: 1
Respuesta: Como optimizar autentificacion

Asunto resuelto!!
me vais a perdonar, porque me equivoqué, el fallo no estaba en el sistema de autentificacion, aunque exponer mi problema aquí me ha servido para mejorar este.
La pagina tardaba mucho porque el index2.php(la aplicacion restringida) llamaba varios ficheros javascript y estos a su vez tambien llamaban a otros. Pero sobre todo lo que hace que se relentice mucho es el TinyMCE, no se si lo conoceis, es un editor web wysiwyg, este funciona con el MCImageManager que sirve para gestionar las imagenes del editor. Estos son muy buenos, pero estoy usando una copia pirata que baje de emule y creo que algo raro pasa porque relentiza mucho.
He optimizado el TinyMCE para que no carge todos sus plugins y he quitado el MCImageManager pirata y ahora todo va como la seda.

Gracias compañeros!!
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:43.