Foros del Web » Programando para Internet » PHP »

Login de usuarios

Estas en el tema de Login de usuarios en el foro de PHP en Foros del Web. Hola amigos, vuelvo con mis dudas al rincón de php Estoy luchando contra un sistema de autentificación, tengo esto, pero no se como definir las ...
  #1 (permalink)  
Antiguo 25/03/2007, 16:38
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Login de usuarios

Hola amigos, vuelvo con mis dudas al rincón de php

Estoy luchando contra un sistema de autentificación, tengo esto, pero no se como definir las sesiones en el caso del logueo correcto

Código PHP:
$nick $_POST['nick'];
$pass $_POST['pass'];

$consulta "SELECT * FROM users WHERE nick='$nick'";
$resultado mysql_query($consulta);
if(
$datos mysql_fetch_array($resultado)){
    if(
$datos['password'] === $pass){
        
//LOGUEO CORRECTO
    
}else{
        
header("location: index.php?error_msg=1");
        exit;
    }
}else{
    
header("location: index.php?error_msg=2"); 
    exit;

A ver si alguien puede darme una mano, de por dónde debería de encararlo.. pq he leido miles de posts, y tutorials pero no logro tenerlo del todo claro, y es una parte importante como para que quede "mas o menos bien"...

Saludos y gracias
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #2 (permalink)  
Antiguo 25/03/2007, 17:35
Avatar de iskariote  
Fecha de Ingreso: marzo-2007
Mensajes: 39
Antigüedad: 17 años, 1 mes
Puntos: 1
Re: Login de usuarios

Estimado:

lo que tienes que hacer es declarar tus variables de sesioens de la siguiente forma:

Código PHP:
<?

   session_start
();  // instruccion clave, debe ser la primera linea de tu codigo

   
$nick $_POST['nick']; 
   
$pass $_POST['pass']; 

   
$consulta "SELECT * FROM users WHERE nick='$nick'"
   
$resultado mysql_query($consulta); 
   if(
$datos mysql_fetch_array($resultado))
      { 
       if(
$datos['password'] === $pass)
             { 
             
$_SESSION['nick'] = $_POST['nick']; 
             
$_SESSION['pass'] = $_POST['pass']; 
              
//LOGUEO CORRECTO 
             
}
       else
             { 
             
header("location: index.php?error_msg=1"); 
             exit; 
      } 
    }
    else
    { 
        
header("location: index.php?error_msg=2");  
        exit; 
    }

?>
atte,

ISKARIOTE
  #3 (permalink)  
Antiguo 25/03/2007, 17:41
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

Muchas gracias iskariote por contestarme!

Ahora mi duda, con eso ya basta?

porque he leido sobre propagar la SID por cookies o por la url, etc.. cmo debo hacerlo :s

No tengo muy bien todo esto, luego de que el usuario se loguea y (como bien dijo Iskariote) pongo datos en $_SESSION, como hago para que al navegar por la web el usuario se "mantenga logueado"??


Saludos y gracias
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #4 (permalink)  
Antiguo 25/03/2007, 17:56
Avatar de MWNS  
Fecha de Ingreso: julio-2003
Mensajes: 528
Antigüedad: 20 años, 9 meses
Puntos: 2
Re: Login de usuarios

hola, lo puedes hacer tal cual te dice iskariote, solo hare una pequeña coreccion:

Código PHP:
<? 
   $nick 
$_POST['nick'];  
   
$pass $_POST['pass'];  

   
$consulta "SELECT * FROM users WHERE nick='$nick'";  
   
$resultado mysql_query($consulta);  
   if(
$datos mysql_fetch_array($resultado)) 
      {  
       if(
$datos['password'] === $pass
             {
             
session_star();
             
$_SESSION['autenticado'] = "ok";  
             
$_SESSION['nick'] = $nick;  
             
$_SESSION['pass'] = $pass;  
             
header("location: ingreso_correcto.php");  
             exit;
             } 
       else 
             {  
             
header("location: index.php?error_msg=1");  
             exit;  
             }  
        } 
        else 
        {  
        
header("location: index.php?error_msg=2");   
        exit;  
        } 

?>
ya cuando por ejemplo entres a otra seccion(script) donde necesitas reconocer la session puedes manejar algo asi:

Código PHP:
<? 
//ingreso_correcto.php

session_start();

if(!isset(
$_SESSION[autenticado]))
{
echo
"Hola!, debes registrarte para ingresar aca";
}
else
{
echo
"Hola!, eres un asuario registrado";
}
?>
y bueno, asi puedes trabajar en todas las secciones donde necesites autenticar si se esta logueado o no
__________________
MWNS
Mario Navas
http://marionavas.com

Última edición por MWNS; 25/03/2007 a las 20:10 Razón: upsss. un pequeño error...
  #5 (permalink)  
Antiguo 25/03/2007, 18:11
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

Muchas gracias a ambos, la verdad que me ha servido...!

Ahora, tengo una duda... no entiendo porque me dice que no puede mandar los headers, pq ya fueron enviados...

Código PHP:
<?php
include ("config.php");

$nick $_POST['nick'];
$pass $_POST['pass'];

$consulta "SELECT * FROM users WHERE nick='$nick'";
$resultado mysql_query($consulta);
if(
$datos mysql_fetch_array($resultado)){
    if(
$datos['password'] === $pass){
             
session_start();
             
$_SESSION['autenticado'] = "ok";
             
$_SESSION['nick'] = $nick;
             
$_SESSION['pass'] = $pass;
             
header("location: index.php");
             exit;     }else{
        
header("location: index.php?error_msg=1");
        exit;
    }
}else{
    
header("location: index.php?error_msg=2"); 
    exit;
}    
?>
Se que eso sucede cuando se imprime algun tipo de info html antes del header, pero me parece que este no es el caso :s

Alguna idea de que puede ser? y / o como podría solucionarse...


¿?

Gracias
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #6 (permalink)  
Antiguo 25/03/2007, 18:20
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

Me da este error (al loguerame bien, sino simplemente me da el error de headers already sent):

Cita:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/busca/public_html/login.php:1) in /home/busca/public_html/login.php on line 11

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/busca/public_html/login.php:1) in /home/busca/public_html/login.php on line 11

Warning: Cannot modify header information - headers already sent by (output started at /home/busca/public_html/login.php:1) in /home/busca/public_html/login.php on line 15
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #7 (permalink)  
Antiguo 26/03/2007, 08:55
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 20 años, 11 meses
Puntos: 3
Re: Login de usuarios

Mi amosta prueba con esta a ver si te funciona

Código PHP:
include ("config.php");

$nick $_POST['nick'];
$pass $_POST['pass'];

    
$sql "select * from tabla where Username ='" $login "' and password ='" $pw "'";
    
$rs mysql_query($sql);
        if(
mysql_num_rows($rs) > 0)
            {
                
session_start();
                
$row mysql_fetch_assoc($rs);
                
$_SESSION['sysop'] = $row['id'];
                
$_SESSION['autentificado'] = "ok";
        
$redir="home_dist.php";
            }
            else
            {
        
$redir 'login.php?msg=Login o Contraseña incorrecta \\n Intente nuevamente';
            }
  
header("Location: " $redir); 
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
  #8 (permalink)  
Antiguo 26/03/2007, 12:52
Avatar de MWNS  
Fecha de Ingreso: julio-2003
Mensajes: 528
Antigüedad: 20 años, 9 meses
Puntos: 2
Re: Login de usuarios

__________________
MWNS
Mario Navas
http://marionavas.com
  #9 (permalink)  
Antiguo 27/03/2007, 16:33
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

Gracias a ti también cirujano

Pero tanto con el primer código, como con el de el_cirujano, sigo teniendo este problema:

Cita:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/busca/public_html/login.php:1) in /home/busca/public_html/login.php on line 11

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/busca/public_html/login.php:1) in /home/busca/public_html/login.php on line 11

Warning: Cannot modify header information - headers already sent by (output started at /home/busca/public_html/login.php:1) in /home/busca/public_html/login.php on line 15

Evidentemente hay algun problema, pero no entiendo porqué, ya que no hay ningun texto antes del header o la creación de session


Alguna idea?


(este es el código COMPLETO del archivo):

Código:
<?php
include ("config.php");

$nick = $_POST['nick'];
$pass = $_POST['pass'];

$consulta = "SELECT * FROM an_users WHERE nick='$nick'";
$resultado = mysql_query($consulta);
if($datos = mysql_fetch_array($resultado)){
	if($datos['password'] === $pass){
             session_start();
             $_SESSION['autenticado'] = "ok";
             $_SESSION['nick'] = $nick;
             $_SESSION['pass'] = $pass;
             header("location: index.php");
             exit; 	}else{
		header("location: index.php?error_msg=1");
		exit;
	}
}else{
	header("location: index.php?error_msg=2"); 
	exit;
}	
?>

Por favor, espero que alguien pueda ayudarme...


Saludos y gracias a todos
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #10 (permalink)  
Antiguo 27/03/2007, 17:41
 
Fecha de Ingreso: octubre-2006
Mensajes: 50
Antigüedad: 17 años, 6 meses
Puntos: 2
Re: Login de usuarios

Código PHP:
<?php
session_start
();

include (
"config.php");

$nick $_POST['nick'];
$pass $_POST['pass'];

$consulta "SELECT * FROM an_users WHERE nick='$nick'";
$resultado mysql_query($consulta);
if(
$datos mysql_fetch_array($resultado)){
    if(
$datos['password'] === $pass){
             
             
$_SESSION['autenticado'] = "ok";
             
$_SESSION['nick'] = $nick;
             
$_SESSION['pass'] = $pass;
             
header("location: index.php");
             exit;     }else{
        
header("location: index.php?error_msg=1");
        exit;
    }
}else{
    
header("location: index.php?error_msg=2"); 
    exit;
}    
?>
Pruebalo asi el session_start() debe estar al principio por eso creo te da error.
  #11 (permalink)  
Antiguo 27/03/2007, 17:48
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

Gracias ElGargola, pero sabes que he probado como me dices y me sigue dando el error de headers already sent

Cita:
headers already sent by (output started at /home/busca/public_html/login.php:1)

Alguna idea?


Bye
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #12 (permalink)  
Antiguo 27/03/2007, 17:58
Avatar de gerson  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 481
Antigüedad: 19 años, 2 meses
Puntos: 4
Re: Login de usuarios

Hola Anarninquë, tal vez exista un espacio antes de "<?php".

Saludos.
__________________

  #13 (permalink)  
Antiguo 27/03/2007, 18:31
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

Ningun espacio

Ya no se que mas probar... no se que puede ser
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #14 (permalink)  
Antiguo 27/03/2007, 18:51
Avatar de davico_tico  
Fecha de Ingreso: marzo-2007
Mensajes: 27
Antigüedad: 17 años
Puntos: 0
Re: Login de usuarios

Mucho
Probá usando el require("config.php"), en lugar de include.
  #15 (permalink)  
Antiguo 27/03/2007, 19:05
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

sigue dando el mismo error buaaaa


De hecho hasta quite en require / include y puse el codigo mismo del config y nada


ojala alguien pueda ayudarme, estoy realmente trancado con esto
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #16 (permalink)  
Antiguo 28/03/2007, 04:45
Avatar de MWNS  
Fecha de Ingreso: julio-2003
Mensajes: 528
Antigüedad: 20 años, 9 meses
Puntos: 2
Re: Login de usuarios

hola, podria ver el code que compone tu config.php¿?
__________________
MWNS
Mario Navas
http://marionavas.com
  #17 (permalink)  
Antiguo 28/03/2007, 05:51
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Re: Login de usuarios

Hola quizas colocando:
Al principio del codigo
Código PHP:
ob_start(); 
y al final del codigo:
Código PHP:
ob_end_flush(); 
Lo soluciones, Suerte y Saludos.
__________________
->Aprender es un proceso que incluye el error..
  #18 (permalink)  
Antiguo 28/03/2007, 06:45
Avatar de davico_tico  
Fecha de Ingreso: marzo-2007
Mensajes: 27
Antigüedad: 17 años
Puntos: 0
Re: Login de usuarios

Casi no hay donde perderse, pero se necesita ver lo que hay en tu "config.php". Mostrame lo que hay en tu "config.php".
  #19 (permalink)  
Antiguo 28/03/2007, 06:56
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

El código del config.php
Código PHP:
<?php
$dbh 
mysql_connect ("localhost""user""pass") or die ('Error al intentar establecer una conexión con la base de datos. ' mysql_error());
mysql_select_db ("BBDD");

$mail_sitio "[email protected]";
?>

El código del login.php
Código PHP:
<?php
include ("config.php");

$nick $_POST['nick'];
$pass $_POST['pass'];

$consulta "SELECT * FROM an_users WHERE nick='$nick'";
$resultado mysql_query($consulta);
if(
$datos mysql_fetch_array($resultado)){
    if(
$datos['password'] === $pass){
        
session_start();
        
$_SESSION['autenticado'] = "ok";
        
$_SESSION['nick'] = $nick;
        
$_SESSION['pass'] = $pass;
        
header("location: index.php");
        exit;
    }else{
        
header("location: index.php?error_msg=1");
        exit;
    }
}else{
    
header("location: index.php?error_msg=2"); 
    exit;
}    
?>

Gracias amigos por preocuparse... la verdad me tiene loco esto esperemos encontrar una solución

Saludos
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #20 (permalink)  
Antiguo 28/03/2007, 20:58
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

Puede tener que ver en algo la codificación de caracteres???
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #21 (permalink)  
Antiguo 28/03/2007, 21:31
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

Creo que (por mas loco que suene) era un problema con la codif. de caracteres :s


Mañana les cuento :p

__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
  #22 (permalink)  
Antiguo 29/03/2007, 03:46
Avatar de Anarninquë
Colaborador
 
Fecha de Ingreso: julio-2005
Ubicación: MVD | Uruguay
Mensajes: 1.096
Antigüedad: 18 años, 9 meses
Puntos: 28
Re: Login de usuarios

Bueno, finalmente luego de probar CUALQUIER cosa... incluidas cosas absurdas - pero no inútiles- llegue al problema...

El problema se debía a que los archivos estaban codificados como UTF-8 con firma BOM, luego de que sospeche de eso, busque y encontré este link, que confirmó mi teoría :s


Saludos y gracias a todos los que se molestaron en ayudarme
__________________
Marcelo Ferreiro - Desarrollador Web
Mi Web - Pixelar.me
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 23:43.