Foros del Web » Programando para Internet » PHP »

es seguro este sistema de login?

Estas en el tema de es seguro este sistema de login? en el foro de PHP en Foros del Web. acabo de hacer un sistema de login de usuarios y me preguntaba si es un script seguro y si ahy otra forma mas simple de ...
  #1 (permalink)  
Antiguo 28/09/2006, 13:04
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
es seguro este sistema de login?

acabo de hacer un sistema de login de usuarios y me preguntaba si es un script seguro y si ahy otra forma mas simple de hacerlo o que sea mas eficiente ya que uso dos querys y lo ideal seria usar uno, pero no se me ocurre otra forma de evitar los intentos de conexion masivos para sacar el pass

aca les dejo el codigo:

Código PHP:
<?php
session_start
(); //// Antes de iniciar una sesion nueva
session_destroy(); // se detruye cualquier session anterior.
if($_POST['conectar']){
    
/// Valores enviados por POST ///////////////////////////////////////
    
$nick $_POST['nick'];
    
$pass md5($_POST['pass']);
    
/////////////////////////////////////////////////////////////////////
    
unset($_POST); // Se destruye el array $_POST que ya no es necesario.
    
    
if(eregi("^[-_A-Z0-9]{3,20}$",$nick)){ // Se comprueba si el nick es valido.
        /// SQL /////////////////////////////////////////////////////////////
        
include("sql.php"); // Conexion a la BD.
        
$resp mysql_query("SELECT id_usuario,nick,pass,intentos FROM usuarios WHERE nick='$nick' LIMIT 1;",$conexion);
        
/////////////////////////////////////////////////////////////////////
        
if(mysql_num_rows($resp) == 1){ // Si existe tal usuario ...
            
$row mysql_fetch_assoc($resp);
            if(
$row['intentos'] < 5){ // ... se comprueba si tiene menos intentos de conexion del maximo permitido y ...
                
if($row['pass'] == $pass ){ // ... se comprueba la contrseña del usuario con la contrseña enviada. 
                    
session_start(); // Inicio de sesion.
                    /////////////////////////////////////////////////////////
                    
$_SESSION['inicio'] = time();
                    
$_SESSION['id_usuario'] = mysql_result($resp,0,"id_usuario");
                    
$_SESSION['nick'] = mysql_result($resp,0,"nick");
                    
/////////////////////////////////////////////////////////
                    
mysql_query("UPDATE usuarios set u_conexion='$_SESSION[inicio]', intentos=0 WHERE nick='$nick' LIMIT 1");
                    
/////////////////////////////////////////////////////////
                    
header("Location: ../index.php");
                } else { 
// si la contrseña no coincide, se aumenta los intentos en +1.
                    
mysql_query("UPDATE usuarios SET intentos=intentos+1 WHERE nick='$nick' LIMIT 1");
                    echo 
"Error: Contraseña incorrecta";
                }
            } else { echo 
"Error: Demasiados intentos de conexion"; } // Supera el maximo de intentos permitidos.
        
} else { echo "Error: ".$nick." no existe en la BD"; } // Si no existe tal usuario.
    
} else { echo "Error: Nick no valido."// Nick no valido.
} else { header("Location: ../index.php"); }
?>

Última edición por finikini; 29/09/2006 a las 14:33
  #2 (permalink)  
Antiguo 28/09/2006, 13:26
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
mmm, mirando tu código, me gustaría saber para que utilizas dos veces session_star()???, una al principio y otra en un if??? No bastaría con una??

See you!
  #3 (permalink)  
Antiguo 28/09/2006, 23:17
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
porque no solo uso las variables de sesion para los usuarios logueados, asi si la session tiene variables de antes, las destruyo antes de loguearse e inicio session de nuevo, aunque pensandolo, tb podria usar unset('$_SESSION');
  #4 (permalink)  
Antiguo 29/09/2006, 02:06
 
Fecha de Ingreso: agosto-2006
Mensajes: 41
Antigüedad: 17 años, 8 meses
Puntos: 2
Hola finikini,

a mi el sistema me parece bien.

Si lo que quieres es evitar hacer dos queries puedes probar algo así:
- si el password es incorrecto, haces un sleep() de por ejemplo 3 segundos. Para alguien que quiera crackear tu sistema le supone multiplicar por mucho los intentos que necesita. Mientras que para una persona se puede considerar una espera "normal". Simplemente con esto ya tienes un sistema bastante seguro.

Pero al hacerlo de esta manera hay un pequeño problema y es que mientras el script está en espera, se puede abrir otra ventana e intentarlo de nuevo. Para resolver esto, vas a necesitar dos queries más y creo que es lo que quieres evitar, pero bueno explico como hacerlo. Necesitas un flag en la tabla de usuarios que te indique si el usuario está bloqueado. Necesitas cambiar el estado antes del sleep y después. Si hay alguien que está intentando hacer un login mientras su registro está bloqueado puedes asegurar que está intentando crackear tu sistema.

Espero que te sirva,

Albert Lanchas
  #5 (permalink)  
Antiguo 29/09/2006, 03:41
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
wenas alblan, gracias por respuesta, siempre es bueno comprobar alternativas :D pero prefiero usar mi forma, la veo mas simple y consigo lo mismo, ademas evito cualquier pirula y al fin alcabo necesito el segundo query para guardar la fecha de conexion del usuario.

pero me has dado una idea, la de guardar un log, para saber quien esta intentando sacar el pass :P
  #6 (permalink)  
Antiguo 09/10/2006, 08:57
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Pregunta Ciertas dudas...

Hola finikini, en este momento necesito realizar un sistema de logueado, y al mirar el tuyo, me gustaría guiarme de el. Al estudiarlo he encontrado ciertas cosas que no entiendo como se utilizan o para qué las utilizas, me podrías ayudar??

1. Preguntas if($_POST['conectar']), no entiendo por que preguntas de esta manera, entiendo que $_POST se utiliza para saber si hay valores en él o no, pero que función cumple 'conectar'???

2. dentro de mysql select utilizas LIMIT 1, para qué utilizas esto???. Cuál es la función de LIMIT??

3. if(mysql_num_rows($resp) == 1), está lógica no la entiendo, entiendo que si el resultado de la consulta de mysql tiene que ser igual a 1, pero.. realmente me gustaría que me explicaras mejor esta instrucción con tu lógica.

4. $row = mysql_fetch_assoc($resp), ésta tampoco es que la entienda muy bien.

De todas formas, estoy analizando tu código para ver si puedo implementar algo parecido.........

Gracias de antemano
  #7 (permalink)  
Antiguo 09/10/2006, 09:13
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Cita:
Iniciado por Carxl Ver Mensaje

1. Preguntas if($_POST['conectar']), no entiendo por que preguntas de esta manera, entiendo que $_POST se utiliza para saber si hay valores en él o no, pero que función cumple 'conectar'???

2. dentro de mysql select utilizas LIMIT 1, para qué utilizas esto???. Cuál es la función de LIMIT??

3. if(mysql_num_rows($resp) == 1), está lógica no la entiendo, entiendo que si el resultado de la consulta de mysql tiene que ser igual a 1, pero.. realmente me gustaría que me explicaras mejor esta instrucción con tu lógica.

4. $row = mysql_fetch_assoc($resp), ésta tampoco es que la entienda muy bien.
1.- Eso se hace, para ver si se ha enviado el form, es decir, si se ha presionado el botón conectar...

2.- la función de LIMIT es tal cual lo dice su nombre... Limitar los resultados que uno busca, en este caso a 1, osea, solo recoges un registro, mientras que sin limit, puedes recoger todos los resultados que desees...

3.- Eso sirve, para verificar si existe el registro que busca, utiliza " == 1 " para especificar que solo quiere 1... o más bien que existe el registro...

4.- Eso se utiliza para sacar los registros de la tabla...

Disculpa las explicaciones a medias... Pero no soy pedagogo xD... Así que no sé explicar bien este tipo de asuntos... Espero te haya quedado claro... Sino, otro te explicará con más paciencia xD
  #8 (permalink)  
Antiguo 09/10/2006, 09:22
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Mejor...

Hey gracias spider boy.

Ya me quedó claro lo del limit.

Lo del $_POST['conectar'], realmente se lo que hace, pero no entiendo es como lo está utilizando aquí, de donde proviene 'conectar'.

Y la pregunta 3 y 4 todavía las tengo a medias.

De nuevo gracias...
  #9 (permalink)  
Antiguo 09/10/2006, 11:45
 
Fecha de Ingreso: diciembre-2003
Mensajes: 204
Antigüedad: 20 años, 4 meses
Puntos: 2
hola finikini, a ver, me parece correcto tu sistema de login, pero lellendo el post veo que le das bastante importancia al tiempo de ejecución del script, yo haría una pequeña e insignificante corrección:

Cuando guardas en variables de sesión el id de usuario y el nick... por que usas el mysql_result? esos datos ya los tienes en el array $row, que de echo ya utilizas antes para comparar la contraseña.

Lo demás me parece correcto, felicidades ;)
  #10 (permalink)  
Antiguo 09/10/2006, 12:11
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
wenas Carxl me alegro que te interese el script :D

te resuelvo las dudas:

lo de $_POST['conectar'] viene del boton que que envia el formulario se llama 'conectar' al igual que el campo del nick se llama 'nick' $_POST['nick'] ...
lo unico que con $_POST['conectar'] solo comprueba si se ha pulsado el bonton del formulario, es una tonteria en verdad, mejor usar $_POST.

Lo del limit 1 es para que busque solo el registro que quiero y pare, en vez de recorrer toda la tabla buscando posibles coincidencias

if(mysql_num_rows($resp) == 1){

echo "usuario encontrado";

} else {

echo "usuario no existe";

}

uso eso porque por huevos tienes que salir uno de lo contrario es que no existe, no tiene mucha logica XD

$row = mysql_fetch_assoc($resp) // esto es para pasar los resultados obtenidos del registro al array $row para luego tratar con ellos, ya sea comprobar la contraseña o crear las variables de session del usuario.

weno espero que me hayas entendido, pq a veces no me entiendo ni yo XD un saludo
  #11 (permalink)  
Antiguo 09/10/2006, 12:30
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
tienes razon dachux, ya lo corregi ;)
aqui pogo el codigo de la nueva version, para el que lo quiera usar y mas explicadito

Código PHP:
///////////////////////////////////////////////////////////////////////////
///                                                                        ///
///        SISTEMA DE LOGIN de usuarios                                    ///        
///        + bloqueo de cuentas ( evitando sacar pass por fuerza bruta )    ///
///                                                                        ///
///        by leven ( tambien conocido por finikini XD )                    ///
///                                                                        ///
///////////////////////////////////////////////////////////////////////////

session_start(); // Se destruye cualquier
session_unset(); // session anterior antes de
session_destroy(); // comenzar con el scrip. Esto es opcional

if($_POST){ /// Se comrpueba si $_POST tiene algun valor
    /// Valores enviados por POST ///////////////////////////////////////
    
$nick $_POST['nick']; // pasamos $_POST['nick'] a $nick
    
$pass md5($_POST['pass']); // pasamos $_POST['pass'] a $pass codificado en MD5 que es como estan guardadas la pass en la BD. 
    /////////////////////////////////////////////////////////////////////
    
unset($_POST); /// Se destruye el array $_POST que ya no lo necesitamos
    /////////////////////////////////////////////////////////////////////
    
if(eregi("^[-_A-Z0-9]{3,20}$",$nick)){ // Se comprueba si el nick es valido. ( Valido: entre 3 y 20 caracteres que sean '-', '_', de la 'A' a la 'Z' y 0 al 9 )
        /// SQL ////////////////////////////////////////////////////////////////////    
        
include("sql.php"); // Conexion a la BD.
        /// Buscamos el registro en la BD que conincida con $nick. Solo buscamos un registro, por eso LIMIT 1
        
$resp mysql_query("SELECT id_usuario,nick,pass,intentos FROM usuarios WHERE nick='$nick' LIMIT 1",$conexion);
        
////////////////////////////////////////////////////////////////////////////
        
if(mysql_num_rows($resp) == 1){ /// Se comprueba si dio un resultado
            /// Si da un resultado es que existe tal usuario ...
            
$row mysql_fetch_assoc($resp); /// ... guardamos los valores del registro en la variable $row
            
if($row['intentos'] < 5){ /// Ahora comprobamos si tiene menos de 5 intentos fallidos de conexion.
                /// En el caso de tener menos de 5 intentos, se comprueba si la contraseña es correcta
                
if($pass == $row['pass']){
                    
/// Si la contraseña es correcta ...
                    
session_start(); /// Se inicia la session
                    
$_SESSION['id_usuario'] = $row['id_usuario']; /// Variable de session que contiene la ID del usuario, ideal para autorizar a zonas restringidas
                    
$_SESSION['usuario'] = $row['nick']; /// Variable de session que contiene el nombre del usuario
                    
                    /// Ahora actualizamos el registro del usuario, con la fecha de la ultima conexion y la ultima ip,
                    /// ademas sumamos en +1 las conexiones que lleva el usuario en total desde su resgitro y ponemos los intentos fallidos a 0
                    
$fecha time(); // fecha en formato timestamp.
                    
$ip "xxx.xxx.xxx.xxx"/// Ip del usuario, esto en si no vale de nada es un hueco para poner
                                             /// una funcion que obtenga la ip mas adelante cuando haga la funcion, pero mientras tengo que usar un IP
                    /// SQL ///////////////////////////////////////////////////////////
                    
mysql_query("UPDATE usuarios SET uconexion_fecha='$fecha', uconexion_ip='$ip' , conexiones=conexiones+1, intentos=0 WHERE id_usuario='$row[id_usuario]' LIMIT 1",$conexion);
                    
///////////////////////////////////////////////////////////////////
                    
header("Location: ../index.php"); /// una vez logueado redirigimos al usuario al index de la pagina o a su panel de control.
                
                
} else {
                    
/// Si la contraseña es incorrecta le sumamamos a los intentos +1 
                    /// SQL ///////////////////////////////////////////////////////////
                    
mysql_query("UPDATE usuarios SET intentos=intentos+1 WHERE id_usuario='$row[id_usuario]' LIMIT 1",$conexion);
                    
///////////////////////////////////////////////////////////////////
                    
echo "Cotraseña incorrecta.";
                }
            } else { echo 
"Cuenta bloqueada ..."; } /// Salida para cuando supere los intentos de conexion fallidos
        
} else { echo "No existe tal usuario."; } /// Salida para cuendo no encuentre ningun usuario en la bd con el $nick enviado
    
} else { echo "nick no valido"; } /// Salida para cuendo el nick introducido en el formulario no sea valido
} else { header("Location: ../index.php"); } /// Salida para cuando no se envie nada por $_POST, osea que se acceda al script directamente sin usar el formulario. 
En las salidas se pueden usar header para redirigir a otra pagina, yo personalemte uso 'header' en vez de 'echo' porque uso un sistema de errores, solo tengo que enviar por $_GET[] el numero del error.

Cuando la cuenta se bloquea, se puede redirigir a un formulario, para luego enviarle un correo al usuario para que reactive la cuenta.
Aunque yo uso un sistema de verificacion por imagen, actualizando los intentos en 4 para darle un nuevo intento ( solo uno :) )

Para restringir zonas o areas de una pagina, solo basta con usar
ejemplo:

if($_SESSION['id_usuario']){ -> codigo de la zona restringida <- } else { echo "no tienes permiso"; }

Tambien puedes usar niveles de usuario, para ello tienes que crear un campo en la tabla que guarde el nivel y darle niveles a los usuarios,
luego guardar el nivel en una session por ejemplo: $_SESSION['nivel'] = $row['nivel']; y comprobarlo de esta manera:

if($_SESSION['id_usuario'] and $_SESSION['nivel'] == 'administrador'){ -> codigo de la zona restringida <- } else { echo "zona restringida"; }

otro ejemplo:
if($_SESSION['id_usuario'] and $_SESSION['nivel'] > 2 ){ -> codigo de la zona restringida <- } else { echo "zona restringida"; }
  #12 (permalink)  
Antiguo 09/10/2006, 16:41
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
O.k!!!

Listo finikini déjame ver de nuevo y cualquier duda te estaré diciendo.....

Y gracias a todos..
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #13 (permalink)  
Antiguo 10/10/2006, 07:07
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 5 meses
Puntos: 1
Cita:
Iniciado por finikini Ver Mensaje
tienes razon dachux, ya lo corregi ;)
aqui pogo el codigo de la nueva version, para el que lo quiera usar y mas explicadito

Código PHP:
///////////////////////////////////////////////////////////////////////////
///                                                                        ///
///        SISTEMA DE LOGIN de usuarios                                    ///        
///        + bloqueo de cuentas ( evitando sacar pass por fuerza bruta )    ///
///                                                                        ///
///        by leven ( tambien conocido por finikini XD )                    ///
///                                                                        ///
///////////////////////////////////////////////////////////////////////////

session_start(); // Se destruye cualquier
session_unset(); // session anterior antes de
session_destroy(); // comenzar con el scrip. Esto es opcional

if($_POST){ /// Se comrpueba si $_POST tiene algun valor
    /// Valores enviados por POST ///////////////////////////////////////
    
$nick $_POST['nick']; // pasamos $_POST['nick'] a $nick
    
$pass md5($_POST['pass']); // pasamos $_POST['pass'] a $pass codificado en MD5 que es como estan guardadas la pass en la BD. 
    /////////////////////////////////////////////////////////////////////
    
unset($_POST); /// Se destruye el array $_POST que ya no lo necesitamos
    /////////////////////////////////////////////////////////////////////
    
if(eregi("^[-_A-Z0-9]{3,20}$",$nick)){ // Se comprueba si el nick es valido. ( Valido: entre 3 y 20 caracteres que sean '-', '_', de la 'A' a la 'Z' y 0 al 9 )
        /// SQL ////////////////////////////////////////////////////////////////////    
        
include("sql.php"); // Conexion a la BD.
        /// Buscamos el registro en la BD que conincida con $nick. Solo buscamos un registro, por eso LIMIT 1
        
$resp mysql_query("SELECT id_usuario,nick,pass,intentos FROM usuarios WHERE nick='$nick' LIMIT 1",$conexion);
        
////////////////////////////////////////////////////////////////////////////
        
if(mysql_num_rows($resp) == 1){ /// Se comprueba si dio un resultado
            /// Si da un resultado es que existe tal usuario ...
            
$row mysql_fetch_assoc($resp); /// ... guardamos los valores del registro en la variable $row
            
if($row['intentos'] < 5){ /// Ahora comprobamos si tiene menos de 5 intentos fallidos de conexion.
                /// En el caso de tener menos de 5 intentos, se comprueba si la contraseña es correcta
                
if($pass == $row['pass']){
                    
/// Si la contraseña es correcta ...
                    
session_start(); /// Se inicia la session
                    
$_SESSION['id_usuario'] = $row['id_usuario']; /// Variable de session que contiene la ID del usuario, ideal para autorizar a zonas restringidas
                    
$_SESSION['usuario'] = $row['nick']; /// Variable de session que contiene el nombre del usuario
                    
                    /// Ahora actualizamos el registro del usuario, con la fecha de la ultima conexion y la ultima ip,
                    /// ademas sumamos en +1 las conexiones que lleva el usuario en total desde su resgitro y ponemos los intentos fallidos a 0
                    
$fecha time(); // fecha en formato timestamp.
                    
$ip "xxx.xxx.xxx.xxx"/// Ip del usuario, esto en si no vale de nada es un hueco para poner
                                             /// una funcion que obtenga la ip mas adelante cuando haga la funcion, pero mientras tengo que usar un IP
                    /// SQL ///////////////////////////////////////////////////////////
                    
mysql_query("UPDATE usuarios SET uconexion_fecha='$fecha', uconexion_ip='$ip' , conexiones=conexiones+1, intentos=0 WHERE id_usuario='$row[id_usuario]' LIMIT 1",$conexion);
                    
///////////////////////////////////////////////////////////////////
                    
header("Location: ../index.php"); /// una vez logueado redirigimos al usuario al index de la pagina o a su panel de control.
                
                
} else {
                    
/// Si la contraseña es incorrecta le sumamamos a los intentos +1 
                    /// SQL ///////////////////////////////////////////////////////////
                    
mysql_query("UPDATE usuarios SET intentos=intentos+1 WHERE id_usuario='$row[id_usuario]' LIMIT 1",$conexion);
                    
///////////////////////////////////////////////////////////////////
                    
echo "Cotraseña incorrecta.";
                }
            } else { echo 
"Cuenta bloqueada ..."; } /// Salida para cuando supere los intentos de conexion fallidos
        
} else { echo "No existe tal usuario."; } /// Salida para cuendo no encuentre ningun usuario en la bd con el $nick enviado
    
} else { echo "nick no valido"; } /// Salida para cuendo el nick introducido en el formulario no sea valido
} else { header("Location: ../index.php"); } /// Salida para cuando no se envie nada por $_POST, osea que se acceda al script directamente sin usar el formulario. 
En las salidas se pueden usar header para redirigir a otra pagina, yo personalemte uso 'header' en vez de 'echo' porque uso un sistema de errores, solo tengo que enviar por $_GET[] el numero del error.

Cuando la cuenta se bloquea, se puede redirigir a un formulario, para luego enviarle un correo al usuario para que reactive la cuenta.
Aunque yo uso un sistema de verificacion por imagen, actualizando los intentos en 4 para darle un nuevo intento ( solo uno :) )

Para restringir zonas o areas de una pagina, solo basta con usar
ejemplo:

if($_SESSION['id_usuario']){ -> codigo de la zona restringida <- } else { echo "no tienes permiso"; }

Tambien puedes usar niveles de usuario, para ello tienes que crear un campo en la tabla que guarde el nivel y darle niveles a los usuarios,
luego guardar el nivel en una session por ejemplo: $_SESSION['nivel'] = $row['nivel']; y comprobarlo de esta manera:

if($_SESSION['id_usuario'] and $_SESSION['nivel'] == 'administrador'){ -> codigo de la zona restringida <- } else { echo "zona restringida"; }

otro ejemplo:
if($_SESSION['id_usuario'] and $_SESSION['nivel'] > 2 ){ -> codigo de la zona restringida <- } else { echo "zona restringida"; }
Amigo finikini XD

Podrias colocar las estruturas de las tablas que estas usando parat sisema de LOGIN, por favor
__________________
Miguel Padrón :cool:
  #14 (permalink)  
Antiguo 10/10/2006, 08:12
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
wenass, la tabla para que funcione el script es suficiente con esta:

Código:
CREATE TABLE `usuarios` (
  `id_usuario` bigint(20) unsigned NOT NULL auto_increment,
  `nick` varchar(255) NOT NULL,
  `pass` varchar(255) NOT NULL,
  `uconexion_fecha` varchar(255) NOT NULL,
  `uconexion_ip` varchar(255) NOT NULL,
  `conexiones` int(10) unsigned NOT NULL default '0',
  `intentos` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id_usuario`),
  UNIQUE KEY `nick` (`nick`),
 )
un saludo.
  #15 (permalink)  
Antiguo 10/10/2006, 09:02
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 5 meses
Puntos: 1
gracias lo probare y te aviso con las dudas que tenga
__________________
Miguel Padrón :cool:
  #16 (permalink)  
Antiguo 10/10/2006, 12:08
 
Fecha de Ingreso: diciembre-2003
Mensajes: 204
Antigüedad: 20 años, 4 meses
Puntos: 2
finikini he vuelto a echarle un ojo y me parece todo correcto.
Lo de los niveles de usuario que comentas al final, tal como lo has propuesto para administrar grupos te serviria, pero para poder permitir/denegar acceso a cualquier pagina a solo un usuario, puede ser un poco caotico, aunque tambien lo veo correcto.

Felicidades, buen trabajo
  #17 (permalink)  
Antiguo 10/10/2006, 13:03
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 8 meses
Puntos: 3
ta excelente este logueo, pero la verdad soy inexperto en esta programacion, que faltaria para q funcionara?

el usuario
contraseña

no se en realidad, alguien q termine este programita excelente para los novatitos que van superandose dia a dia
  #18 (permalink)  
Antiguo 10/10/2006, 14:21
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
a que te refieres con:

Cita:
pero para poder permitir/denegar acceso a cualquier pagina a solo un usuario, puede ser un poco caotico
no lo he entendido bien

para hulray

lo unico que hace falta para que funcione el logueo es un formulario con los campos nick, pass y que el fomulario apunte al script, porsupuesto se necesita una base de datos con los usuarios
  #19 (permalink)  
Antiguo 10/10/2006, 15:47
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 8 meses
Puntos: 3
lo que quiero es que al entrar a alguna pagina despues de el logueo, quede el usuario arriba de la pagina. me entiendes?, algo parecido al logueo en php-nuke, despues de loguearte empiezas a entrar al contenido de la pagina pero siempre queda el nombre del usuario en algun lugar
  #20 (permalink)  
Antiguo 10/10/2006, 16:04
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
para eso guardas una variable de session con el nombre de usuario

trozo del codigo:
Código PHP:
     $row mysql_fetch_assoc($resp); /// ... guardamos los valores del registro en la variable $row 
            
if($row['intentos'] < 5){ /// Ahora comprobamos si tiene menos de 5 intentos fallidos de conexion. 
                /// En el caso de tener menos de 5 intentos, se comprueba si la contraseña es correcta 
                
if($pass == $row['pass']){ 
                    
/// Si la contraseña es correcta ... 
                    
session_start(); /// Se inicia la session 
                    
$_SESSION['id_usuario'] = $row['id_usuario']; /// Variable de session que contiene la ID del usuario, ideal para autorizar a zonas restringidas 
                    
$_SESSION['usuario'] = $row['nick']; /// Variable de session que contiene el nombre del usuario 
                     
                    /// Ahora actualizamos el registro del usuario, con la fecha de la ultima conexion y la ultima ip, 
                    /// ademas sumamos en +1 las conexiones que lleva el usuario en total desde su resgitro y ponemos los intentos fallidos a 0 
ese es un trozo del script, precisamente la parte en la que ha comprobado la contraseña y crea las variables de session

$_SESSION['usuario'] = $row['nick'];

aqui es dnd se guarda el nombre del usuario

$_SESSION['id_usuario'] = $row['id_usuario'];

y esta la ID del usuario

ahora para hacer lo que tu dices solo basta poner en las paginas que lo necesites

echo $_SESSION['usuario'];

y te muestra en nombre

si ademas tienes un panel de usuario, puedes hacer un enlace con su nick a su panel, por ejemplo:

echo "<a href='panel.php'>".$_SESSION['usuario']."</a>";

Una vez que un usuario este logueado, solo tienes que jugar con las sessiones en el resto de la web. Recuerda que en todas las paginas debes tener sesssion_start(); para mantener la session.
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 01:53.