Foros del Web » Programando para Internet » PHP »

Sistema Login

Estas en el tema de Sistema Login en el foro de PHP en Foros del Web. Hola a todos, tengo un problema y no se cual será que no me está validando los datos que entro en el usuario y pass ...
  #1 (permalink)  
Antiguo 17/03/2004, 18:48
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
Pregunta Sistema Login

Hola a todos, tengo un problema y no se cual será que no me está validando los datos que entro en el usuario y pass para porde validar el acceso.

echen un vistazo a mi código.

///code html envio los param usuario y pass por post a un archivo llamado login que esta en la carpeta usuarios de mi sitema

<form action="../usuarios/login.php" method="POST" name="login" id="login">
<table width="85%" border="0" cellspacing="0" cellpadding="1" bgcolor="#0099CC">
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" width="100%">
<tr>
<td colspan="3" class="Textos" height="20">
<div align="center"><font color="#333333"><font color="#666666"><? $error= $_GET[error]; ?><?=$error?></font></font></div></td>
</tr>
<tr>
<td height="30" class="Textos" width="37%">
<div align="right"><font color="#666666">LOGIN&nbsp;</font></div></td>
<td height="30" align="left">
<input name="usuario" type="text" id="usuario" value="<?=$usuario?>" size="10" autocomplete="off"></td>
<td width="35" align="left" valign="middle">&nbsp;</td>
</tr>
<tr>
<td height="30" class="Textos" width="37%">
<div align="right"><font color="#666666">PASSWORD&nbsp;</font></div></td>
<td height="30" align="left">
<input name="pass" type="password" id="pass" value="" size="10"> </td>
<td width="35" align="left" valign="middle">
<div align="center">
<input type="submit" name="Submit" value="Enviar" class="subtitlelink">
</div></td>
</tr>
</table></td>
</tr>
</table>
</form>
/// fin code

ok hasta ahi todo va bien, he aqui el proceso en php de eso

Código PHP:

<?

// Aqui chequeo que el los campos de usuario y pass no esten vacios, en caso de ser cierto hay que redireccionarlo al login de nuevo.
if (empty($usuario) || empty($pass)) {

header"Location: ../html/index.php?error=Login y Password vacíos!" );
}

// de lo contrario
else{
 
// me traigo las variables del form anterior

$user $_POST['usuario'];
$pass $_POST['pass'];
 
// BEGIN conex localhost 

//función para conectarse a la base de datos 
function Conectarse() 

   if (!(
$link=mysql_connect("localhost","usuario","abc123"))) 
   { 
      echo 
"Error conectando a la base de datos."
      exit(); 
   } 
   if (!
mysql_select_db("mibase",$link)) 
   { 
      echo 
"Error seleccionando la base de datos."
      exit(); 
   } 
   return 
$link



// END conex localhost 

$link=Conectarse(); 
//query
$result=mysql_query("SELECT usuario, pass, nivel_acceso, nombres, apellidos FROM usuarios WHERE usuario='$user' AND pass='$pass'",$link);
if (!
$result) {
      echo(
"<p>Error de Mysql: " mysql_error() . "</p>");
      exit();
    }

// chequeo que me traiga los datos como filas 
$rowCheck mysql_num_rows($result);

if(
$rowCheck 0){

while(
$row mysql_fetch_array($result)){

// habilito la sesion para registrar una variable
session_start();

session_register('usuario');
$_SESSION['usuario']=$row['usuario'];
$_SESSION['nivel_acceso']=$row['nivel_acceso'];
$_SESSION['nombres']=$row['nombres'];
$_SESSION['apellidos']=$row['apellidos'];



// si el login esta bien, redirecciono al usuario para que vaya a otra pagina donde se chequea de nuevo la sesion
header"Location: ../usuarios/valido.php" );
    }
    }
else
    {
//si el usuario ni el pass corresponden, mostrar...
header"Location: ../html/index.php?error=ERROR: Login o Password incorrectos!" );
    }
}
?>
en que estaré fallando?

estoy dudando en el registro de las sesiones pero no sé si estoy bien

__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.

Última edición por andinistas; 17/03/2004 a las 18:53
  #2 (permalink)  
Antiguo 17/03/2004, 19:26
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años
Puntos: 1
bueno a bote pronto veo dos errores, uno es el while, no veo que hace aqui, pues solo tendras una salida, osea que pasas las variables directamente

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

luego, el session_register('usuario');
combinado con el array $_SESSION[], debes usuar un metodo u otro, osea que solo el array,

Prueba esto y a verque tal, nos cuentas

Saludos
  #3 (permalink)  
Antiguo 17/03/2004, 20:50
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
todavia no

Ok, borre la linea del while dejando el script mas o menos asi

Código PHP:

//query
$result=mysql_query("SELECT usuario, pass, nivel_acceso, nombres, apellidos FROM usuarios WHERE usuario='$user' AND pass='$pass'",$link);
if (!
$result) {
      echo(
"<p>Error: " mysql_error() . "</p>");
      exit();
    }

// chequeo que me traiga los datos como filas 
$rowCheck mysql_num_rows($result);

if(
$rowCheck 0){

// habilito la sesion para registrar una variable
session_start();
$_SESSION['usuario']=$row['usuario'];
$_SESSION['nivel_acceso']=$row['nivel_acceso'];
$_SESSION['nombres']=$row['nombres'];
$_SESSION['apellidos']=$row['apellidos'];

//session_register('usuario');


// si el login esta bien, redirecciono al usuario para que vaya a otra pagina donde se chequea de nuevo la sesion
header"Location: ../usuarios/valido.php" );
    }
else
    {
//si el usuario ni el pass corresponden, mostrar...
//echo "Login o pass incorrecto. <a href='index.php'>Intente de nuevo!</a>";
header"Location: ../html/index.php?error=ERROR: Login o Password incorrectos!" );
    }
}
?> 
pero igual aunque ingreso los datos bien de login y pass no me deja entrar y me envia a la pagina que destine para el error
__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.
  #4 (permalink)  
Antiguo 17/03/2004, 20:56
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años
Puntos: 1
no se , errores no le veo, lo que si puede ser esqu tenggas las registers globals en off deberias poner
usuario='".$_POST['user']."' AND pass='".$_POST['pass']."'"

suponiendo que el metodo del form sea post, si es get pues $_GET['user'] etc

a ver que tal

saludos
  #5 (permalink)  
Antiguo 17/03/2004, 21:16
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
Exclamación HOLA de nuevo

Hola jordi, mis register_globals estan en ON en mi pc Localhost, pero si estan en ON en el server, de todas formas probe con un <? phpinfo(); ?> y si estaban en ON

register_globals On On .

pero igual no me valida el usuario :S,

conoces de otro sistema de autenticación ? necesito nada mas validar el login y password y sellar las sesiones id, usuario, nombres y apellidos, con eso hago lo demás.


Muchas gracias!
__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.

Última edición por andinistas; 17/03/2004 a las 21:17
  #6 (permalink)  
Antiguo 17/03/2004, 21:34
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años
Puntos: 1
Este sistema es como se hace normalmente,

bueno lo que te falta es que no me habia fijado es sacar el array de los resultados

if($rowCheck > 0){

$row= mysql_fetch_array($result);

luego el resto

haz un echo a ver si te saca algun resutlado
echo $rowCheck ;

a ver que tal
  #7 (permalink)  
Antiguo 18/03/2004, 08:23
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
Pregunta hola de nuevo

Hola Jordi, si me funciona y el $rowcheck se pone en 1 osea que si valida, ahora el problema que tengo y no me daba cuenta es cuando ingreso al sistema ya despues del logueo queriendo verificar si la sesión usuario existe

mi code

Código PHP:
<?php
//abro o comienzo la sesion
session_start();

// chequeo que la sesión esté registrada en el server
if(session_is_registered('usuario')){
}
else
{
// si la sesión no está registrada, regresamos al usuario a la página de login
header"Location: ../html/index.php?error=¡Escriba su login y password!" );
}
?>
pero en el proceso del login tengo la asiganción de las sesiones asi

Código PHP:

// habilito la sesion para registrar las variables
session_start();
$_SESSION['id']=$row['id'];
$_SESSION['usuario']=$row['usuario'];  //esta deberia registrarla
$_SESSION['nivel_acceso']=$row['nivel_acceso'];
$_SESSION['nombres']=$row['nombres'];
$_SESSION['apellidos']=$row['apellidos']; 
pero al validar si las sesiones esta activa (la de usuario) no la valida correctamente y me envia al login de nuevo asi como lo especifico en el codigo

Código PHP:

<?php
//abro o comienzo la sesion
session_start();

// chequeo que la sesión esté registrada en el server
if(session_is_registered('usuario')){
}
else
{
// si la sesión no está registrada, regresamos al usuario a la página de login
header"Location: ../html/index.php?error=¡Escriba su login y password!" );
}
?>

que podrá ser?
__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.

Última edición por andinistas; 18/03/2004 a las 08:24
  #8 (permalink)  
Antiguo 18/03/2004, 08:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te lo han comentado ya .. NO uses funciones session_xxxx() cuando uses ya por otro lado $_SESSION ...

Por ejemplo para la validación de esas variables de sesión tal sólo tienes que usar funciones comunes de verificación si tal variable está definida y/o con valor ..

Código PHP:
<?
session_start
();
if (!isset(
$_SESSION['usuario'])){
    die (
"Usuario no registrado");
}

// etc script/pagina ...
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 18/03/2004, 08:54
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
ok ya

OK Cluster, sin rabia jeje!

ya le he acomodado asi al script

Código PHP:
<?
session_start
();
if (!isset(
$_SESSION['usuario']))

{
//    die ("Usuario no registrado");
header"Location: ../html/index.php?error=¡Escriba su login y password!" );

}
?>
__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.
  #10 (permalink)  
Antiguo 18/03/2004, 09:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te faltó un exit; despues de header() .. sino, la ejecución de tu scrpt continuará y eso no es lo que vas a querer. (pos eso puse el ejemplo con die() que muestra el mensaje de error y termina la ejecución del escript ahí mismo .. )

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 18/03/2004, 09:41
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
Pregunta problema con header

Hola de nuevo, ahora sucede que tengo un problema con header ya enviados,

en el script donde chequeo que este bien el login y pass
inicio las sesiones


Código PHP:

$link
=Conectarse(); 

//query
$result=mysql_query("SELECT id, usuario, pass, nivel_acceso, nombres, apellidos FROM $tablausuarios WHERE usuario='$user' AND pass='$pass'",$link);
if (!
$result) {
      echo(
"<p>Error: " mysql_error() . "</p>");
      exit();
    }

$rowCheck mysql_num_rows($result);

if(
$rowCheck 0){

$rowmysql_fetch_array($result);

// habilito la sesion para registrar las variables
session_start();
$_SESSION['id']=$row['id'];
$_SESSION['usuario']=$row['usuario'];
$_SESSION['nivel_acceso']=$row['nivel_acceso'];
$_SESSION['nombres']=$row['nombres'];
$_SESSION['apellidos']=$row['apellidos'];

// si el login esta bien, redirecciono al usuario para que vaya a otra pagina donde se chequea de nuevo la sesion
header"Location: ../usuarios/valido.php" );

}
else
{
//si el usuario ni el pass corresponden, mostrar...
header"Location: ../html/index.php?error=ERROR: Login o Password incorrectos!" );
    }
?> 

ok hasta ahi todo bien, pero ya dentro del sistema
quiero verificar que este activa la sesion mediante un include que coloco en cada página y hacer referencia al chequeo de la sesion
Código PHP:
<? include ("../include/checkuser.php"?>
Código PHP:

<?
//checkuser.php
session_start();
if (!isset(
$_SESSION['usuario'])){
    die (
"Usuario no registrado");
}
?>
pero obtengo este error:


Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\inetpub\wwwroot\miweb\include\checkuser.php on line 2
__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.

Última edición por andinistas; 18/03/2004 a las 09:54
  #12 (permalink)  
Antiguo 18/03/2004, 10:07
Avatar de juque  
Fecha de Ingreso: marzo-2002
Ubicación: Temuco, Chile
Mensajes: 84
Antigüedad: 22 años, 1 mes
Puntos: 0
quita el
Código PHP:
//checkuser.php 
... y prueba.
__________________
~~
www.juque.cl
  #13 (permalink)  
Antiguo 18/03/2004, 10:09
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
no

Hola lo que me dices es que quite los comentarios

Código PHP:
<?
//checkuser.php --> esto es un comentario
session_start();
if (!isset(
$_SESSION['usuario'])){
    die (
"Usuario no registrado");
}
?>
no tiene nada que ver, y si quito esa validación queda desprotegido mi sistema

__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.
  #14 (permalink)  
Antiguo 18/03/2004, 10:13
Avatar de juque  
Fecha de Ingreso: marzo-2002
Ubicación: Temuco, Chile
Mensajes: 84
Antigüedad: 22 años, 1 mes
Puntos: 0
quita el comentario, cuando trabajas con sesiones la llamada de inicio de la sesión debe estar el la 1ra. linea de tu script. Quita el comentario aquel y prueba tu script.
__________________
~~
www.juque.cl
  #15 (permalink)  
Antiguo 18/03/2004, 10:17
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
tampoco

espera creo que si, estoy revisando
__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.

Última edición por andinistas; 18/03/2004 a las 10:20
  #16 (permalink)  
Antiguo 18/03/2004, 10:25
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
si

si estaba mal en el orden de los includes

<?
// reviso seguridad
include ("include/checkuser.php");
?>

<?
//coloco el head donde van el title, metas, ccs, js, etc
include ("../include/head.php");
?>

gracias
__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.
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 14:49.