Foros del Web » Programando para Internet » PHP »

sesiones con mysql..ayuda por favor..

Estas en el tema de sesiones con mysql..ayuda por favor.. en el foro de PHP en Foros del Web. hola amigos tengo este escript para validar en una base de datos que exista el usuario, si existe me manda al menu pricnipal y si ...
  #1 (permalink)  
Antiguo 06/07/2006, 10:15
 
Fecha de Ingreso: marzo-2005
Mensajes: 372
Antigüedad: 19 años, 1 mes
Puntos: 1
sesiones con mysql..ayuda por favor..

hola amigos tengo este escript para validar en una base de datos que exista el usuario, si existe me manda al menu pricnipal y si no esta me deja en la mispagian del index, mi pregunta es como puedo meterle sesiones para proteger mis paginas, enque line debo meter las sesiones sesion_start(), y lo demas.

**enque parte del codigo meto las seisones, para que me funcione.
proceso_index.php
Código PHP:
<?
include("conexion.php"); 
$link=Conectarse(); 
$sql="select * from usu_paa where usuario='$usuario' and contrasena='$contrasena'";
$resultado=mysql_query($sql,$link);
$row=mysql_num_rows($resultado);
    if(
$row<=0)
       {
      
header ("Location: index.php"); 
       
       }
       else
       {
     
header ("Location: menu.php"); 
       }
?>
y en mi script que se llama menu.php, que codigo tengo que meter para protegerla con la sesiones que se crean antes.

menu.php
Código PHP:
<?
donde meto lo de las sesiones
?
--
codigo
?>
  #2 (permalink)  
Antiguo 06/07/2006, 10:28
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
el session_start() debe ir al principio de todo el documento

saludos
  #3 (permalink)  
Antiguo 06/07/2006, 10:59
 
Fecha de Ingreso: septiembre-2004
Ubicación: Santiago de Chile
Mensajes: 156
Antigüedad: 19 años, 7 meses
Puntos: 0
bueno la verdad es que no te deberia dar la tarea hecha, pero es molesto no saber como hacer las cosas, asi que aqui va, te doy un codigo que te permite validar en MySQL si el usuario existe, tambien si ha introducido incorrectamente su constraseña 3 veces se bloquea el usuario en la base de datos, y ademas trabaja con sesiones.
bueno espero que te sirva

Código PHP:
<?
#Conectamos con MySQL
                        
$conexion mysql_connect("localhost","root","")
                        or die (
"Fallo en el establecimiento de la conexión");

                        
#Seleccionamos la base de datos a utilizar
                        
mysql_select_db("mi_DB")
                        or die(
"Error en la selección de la base de datos");
                        
                        
$nom_get $_POST["user"];
               
$pass_get $_POST["oculto"];

                        if(
$nom_get == ""){
                        
header("Location: principal.php?errorusuario=si");
                        }

                        else{
                        
$resulta mysql_query("select * from login");
                        while(
$rowd mysql_fetch_array($resulta))
                         {
                          
$id_usuarioa $rowa["id_usu"];
                          
$usera $rowa["nombre"];
                          if(
$user != nom_get )
                          {
                           
header("Location: principal.php?errorusuario=si");
                          }
                          }
                        }

      
/*******valido si la contraseña es incorrecta para un usuario valido y sumo 1 intento y bloqueo si tiene 3 intentos******/
                        
$result3 mysql_query("select * from login where nombre='$nom_get'" );
                        while(
$rowb mysql_fetch_array($result3))
                         {
                          
$id_usuariob $rowb["id_usu"];
                          
$user $rowb["nombre"];
                          
$pass $rowb["contra"];
                          
                          if(
$id_usuariob ==""){
                          
header("Location: principal.php?errorusuario=si");
                          }
                          else
                          {
                          if(
$pass != $pass_get){
                          
//si la contraseña es incorrecta para user, se incrementa el intento
                          
$sql mysql_query("update login set intentos = intentos + 1 where id_usu = '$id_usuariob'");
                          
$sql2 mysql_query("select intentos from login where id_usu = '$id_usuariob'");
                           while(
$rowx mysql_fetch_array($sql2)){
                           
$intentox $rowx["intentos"];
                           
//si esta escribiendo un user valido y una pass incorrecta, valida los intentos y si tiene mas de
                           //3, bloquea la cuenta, si tiene menos, arroja un error de usuario
                          
if($intentox >=3){header("Location:bloqueado.htm");}
                          if(
$intentox 3){header("Location: principal.php?errorusuario=si");}
                          }
                           }
                          if(
$pass == $pass_get){
                           
$sql2 mysql_query("select intentos from login where id_usu = '$id_usuariob'");
                           
                           while(
$rowc mysql_fetch_array($sql2)){
                           
$intento $rowc["intentos"];
                           }
                           if(
$intento >=3){header("Location:bloqueado.htm");}
                           if(
$intento <3){
                           
// si antes de los 3 intentos el usuario esta correcto, reseteo los intentos a 0
                           
$sql mysql_query("update login set intentos = 0 where id_usu = '$id_usuariob'");
                           
session_start();
           
session_register('usuario');
                           
$usuario $id_usuariob;

                           
header ("Location: principal.php?usuariovalido=si");
                           }
                          }
                          }
                         }
                        
/*************FIN VALIDACION Contraseña incorrecta, user correcto***********/
                        
mysql_close($conexion);

                       
?>
Luego lo que tu deseas hacer es verificar si el usuario esta logueado. y lo debes hacer de la sigueinte forma:
Código PHP:
<? 
session_start
(); 
if (
$_SESSION['usuario']=""){ 
  
header ("Location: index.php"); 
  exit; 
}
else{ 
 
header("Location:Registrado.php");  
}
?>
La Password viene encriptada en MD5, por eso la paso por un campo oculto, pero eso te toca a ti, haciendo crujir las neuronas las cosas salen mejor
ojala que te sirva, Saludos

Última edición por guiweb; 06/07/2006 a las 11:06
  #4 (permalink)  
Antiguo 06/07/2006, 11:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Código PHP:
<?
sesion_start
(); 
include(
"conexion.php");  
$link=Conectarse();  
$sql="select usario,contrasena from usu_paa where usuario='$usuario' and contrasena='$contrasena'";  // no uses * si sólo haces referencia a un par de campos de tu tabla .. optimizas mejor si usas lo que necesites.
$resultado=mysql_query($sql,$link); 
$row=mysql_num_rows($resultado); 
    if(
$row<=0
       { 
      
header ("Location: index.php");
      exit;  
        
       } 
       else 
       { 
     
// define alguna variable de sesión .. bajo esa variable es donde validaras
     
$_SESSION['usuario']=$usuario;
     
header ("Location: menu.php");  
     exit;       

?>
menu.php
Código PHP:
<?
session_start
();
if (empty(
$_SESSION['usuario'])){
  
header ("Location: index.php");
  exit;
}
echo 
"Hola ".$_SESSION['usuario']; 
?>
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 06/07/2006, 11:06
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 guiweb
bueno la verdad es que no te deberia dar la tarea hecha, pero es molesto no saber como hacer las cosas, asi que aqui va, te doy un codigo que te permite validar en MySQL si el usuario existe, tambien si ha introducido incorrectamente su constraseña 3 veces se bloquea el usuario en la base de datos, y ademas trabaja con sesiones.
bueno espero que te sirva

Código PHP:
<?
#Conectamos con MySQL
                        
$conexion mysql_connect("localhost","root","")
                        or die (
"Fallo en el establecimiento de la conexión");

                        
#Seleccionamos la base de datos a utilizar
                        
mysql_select_db("mi_DB")
                        or die(
"Error en la selección de la base de datos");
                        
                        
$nom_get $_POST["user"];
               
$pass_get $_POST["oculto"];

                        if(
$nom_get == ""){
                        
header("Location: principal.php?errorusuario=si");
                        }

                        else{
                        
$resulta mysql_query("select * from login");
                        while(
$rowd mysql_fetch_array($resulta))
                         {
                          
$id_usuarioa $rowa["id_usu"];
                          
$usera $rowa["nombre"];
                          if(
$user != nom_get )
                          {
                           
header("Location: principal.php?errorusuario=si");
                          }
                          }
                        }

      
/*******valido si la contraseña es incorrecta para un usuario valido y sumo 1 intento y bloqueo si tiene 3 intentos******/
                        
$result3 mysql_query("select * from login where nombre='$nom_get'" );
                        while(
$rowb mysql_fetch_array($result3))
                         {
                          
$id_usuariob $rowb["id_usu"];
                          
$user $rowb["nombre"];
                          
$pass $rowb["contra"];
                          
                          if(
$id_usuariob ==""){
                          
header("Location: principal.php?errorusuario=si");
                          }
                          else
                          {
                          if(
$pass != $pass_get){
                          
//si la contraseña es incorrecta para user, se incrementa el intento
                          
$sql mysql_query("update login set intentos = intentos + 1 where id_usu = '$id_usuariob'");
                          
$sql2 mysql_query("select intentos from login where id_usu = '$id_usuariob'");
                           while(
$rowx mysql_fetch_array($sql2)){
                           
$intentox $rowx["intentos"];
                           
//si esta escribiendo un user valido y una pass incorrecta, valida los intentos y si tiene mas de
                           //3, bloquea la cuenta, si tiene menos, arroja un error de usuario
                          
if($intentox >=3){header("Location:bloqueado.htm");}
                          if(
$intentox 3){header("Location: principal.php?errorusuario=si");}
                          }
                           }
                          if(
$pass == $pass_get){
                           
$sql2 mysql_query("select intentos from login where id_usu = '$id_usuariob'");
                           
                           while(
$rowc mysql_fetch_array($sql2)){
                           
$intento $rowc["intentos"];
                           }
                           if(
$intento >=3){header("Location:bloqueado.htm");}
                           if(
$intento <3){
                           
// si antes de los 3 intentos el usuario esta correcto, reseteo los intentos a 0
                           
$sql mysql_query("update login set intentos = 0 where id_usu = '$id_usuariob'");
                           
session_start();
           
session_register('usuario');
                           
$usuario $id_usuariob;

                           
header ("Location: principal.php?usuariovalido=si");
                           }
                          }
                          }
                         }
                        
/*************FIN VALIDACION Contraseña incorrecta, user correcto***********/
                        
mysql_close($conexion);

                       
?>
La Password viene encriptada en MD5, por eso la paso por un campo oculto, pero eso te toca a ti, haciendo crujir las neuronas las cosas salen mejor
ojala que te sirva, Saludos
Tel faltó para completar .. la estructura de las tablas de tu BBDD implicadas.

podrías simplificar algo el código sin tanto uso de "else" en los "if()" asumiendo que cuando tu redireccionas (con header() de tipo Location) la ejecución del script continua .. pero el "objetivo" no es ese sino que se termine la ejecución del script en ese punto pues a continuación le das la orden al "navegador" que cambie el URL por el que le indicas (vía cabecera HTTP), por ende .. podrías hacer cosas como:

Código PHP:
if($nom_get == ""){ 
                        
header("Location: principal.php?errorusuario=si"); 
                         exit;
                        } 
Y me ahorro el "else" y sus } cierre y demás control del mismo .. En general despues de cada "header() de tipo Location" .. hacer un "exit" para terminar la ejecución del script en ese punto y no esperar otro "if()" o else que valide lo contrario de lo que el primer IF dijo ...

Otro detalle .. podrías usar empty() en lugar de validaciones tipo $variable == '' .. Empty() valida la existencia de la variable y su valor (distinto de NULL o cadena vacia ..o 0)

Otro detalle más .. El uso de sesiones que haces NO ES RECOMENDABLE .. no deberías usar session_register() sino los arrays superglobales $_SESSION .. Tendrás problema con ese código en servidores con register_Globals a OFF (como desde hace un montón de versiones atras PHP viene por defecto así ..) además que NO es seguro el uso de sesiones vía session_register() y asumiento las variables como globales.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 06/07/2006, 11:09
 
Fecha de Ingreso: septiembre-2004
Ubicación: Santiago de Chile
Mensajes: 156
Antigüedad: 19 años, 7 meses
Puntos: 0
ok, no lo sabia, jeje siempre se aprende algo nuevo.
;) lo tendré presente para la proxima Gracias Cluster
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:29.