Foros del Web » Programando para Internet » PHP »

Problema con las Sesiones

Estas en el tema de Problema con las Sesiones en el foro de PHP en Foros del Web. Buenas, pues ya stoy por aqui otra vez jodiendo jaja ;). MI problema ahora son las malditas sesiones, ya se que es lo mas facil ...
  #1 (permalink)  
Antiguo 12/06/2008, 13:47
 
Fecha de Ingreso: marzo-2008
Mensajes: 48
Antigüedad: 16 años, 1 mes
Puntos: 1
Problema con las Sesiones

Buenas,
pues ya stoy por aqui otra vez jodiendo jaja ;). MI problema ahora son las malditas sesiones, ya se que es lo mas facil del mundo pero hay un error que me está volviendo loco.
En área registringida de mi web quiero hacer sesiones para almacenar el nombre de usuario y la contraseña del que inició sesion. Para ello tengo el archivo "identificacion.php" que se encarga de verificar los datos introducidos por el usuario con la base de datos de las contraseñas:
Código PHP:
<?
session_start
();

include 
"conexion.php";
// Comparamos a ver si son correctos
$result=mysql_query("SELECT * FROM contrasenas",$conn);

while(
$row2=mysql_fetch_row($result)){ //Recorremos la Base de Datos
  
    
if ($_POST["usuario"]==$row2[3] && $_POST["password"]==$row2[4]){
    
$valido="si";
    break;

    
$_SESSION['usuario'] = $row2[3];
    
$_SESSION['password'] = $row2[4];
    }

    else{
    
$valido="no";
    }
}

include 
"cerrar_conexion.php";

?>
y luego en la pagina "area_restringida.php" pongo la siguiente linea
Código PHP:
<? include "identificacion.php" ?>
al principio. El caso esque al abrir "area_restringida.php" me da el siguiente error:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/area_clientes.php:2) in /var/www/identificacion.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/area_clientes.php:2) in /var/www/identificacion.php on line 2

Sin embargo cuando imprimo el .$_SESSION['usuario'] me lo hace bien, solo que me da el error ese arriba.
Me desquiciooooo! jajaja
Gracias y un saludo
  #2 (permalink)  
Antiguo 12/06/2008, 13:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con las Sesiones

no crees que un SELECT * FROM contrasenas es muy pesado... vaya, estas listando todos los campos!!!

y para eso no fueron diseñadas las base de datos, la verdad...

seria mas facil un SELECT * FROM contrasenas WHERE password='$_POST[password]' AND usuario='$_POST[usuario]'

no me meto en líos con sesiones, pero... de verdad, esta muy mala tu lógica, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/06/2008, 14:01
 
Fecha de Ingreso: marzo-2008
Mensajes: 48
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problema con las Sesiones

bueno la verdad esque todas las ideas que me ayuden a mejorar la pagina son bien recibidas. La verdad esque es la primera vez que programo php.
Pero gracias! Un saludo
  #4 (permalink)  
Antiguo 12/06/2008, 14:32
 
Fecha de Ingreso: marzo-2008
Mensajes: 48
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problema con las Sesiones

Alguien sabe si podria poner:

$result2=mysql_query("SELECT * FROM $_SESSION['usuario']",$conn);

Para seleccionar una base de datos cuyo nombre está almacenado en la variable $_SESSION['usuario'] ?? esque me da el siguiente error:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/area_clientes.php on line 7

Gracias
  #5 (permalink)  
Antiguo 12/06/2008, 14:39
Avatar de Tombar  
Fecha de Ingreso: junio-2008
Ubicación: /home/tombar
Mensajes: 198
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: Problema con las Sesiones

Te dejo el codigo como yo lo haria, de todas formas respete tus variables y estructura.

Código PHP:
<? 
//siempre incluye tus archivos al comienzo a menos q tengas una razon valida :)
include "conexion.php";

//aqui lo que vamos a hacer es sanitizar los datos que te envian. para que no te hagan injecciones sql simples.
//mas adelante deberias poner una funcion que sanitize de veras :P
$usuario mysql_escape_string($_POST["usuario"]);

//aqui el unico cambio que haria seria que ademas encriptaria la clave usando md5. 
$contrasena mysql_escape_string($_POST["password"]);

//vamos a hacer la consulta a ver si el $usuario y $contrasena son correctos
$result=mysql_query("SELECT nombredeusario, contrasena FROM contrasenas where nombredeusuario = $usuario and contrasena = $contrasena ",$conn); 

//chequeamos si hubo resultados, si el resultado es correcto deberia haber 1 solo resultado
if (mysql_num_rows($result) == 1) {    
    
    
// en lo personal usaria true en ves de si
    
$valido="si";
    
    
//no precisamos hacer un while ya q es solo un resultado el que tienes
    
$row mysql_fetch_row($result);
    
    
//abres la session 
    
session_start(); 

    
$_SESSION['usuario'] = $row['nombredeusuario']; 
    
$_SESSION['password'] = $row['contrasena']; 

}else {
    
    
// en lo personal usaria false en ves de no
    
$valido="no";
    
}

include 
"cerrar_conexion.php"
?>
como te mencionaban antes hay un par de detalles impotantes.

1- es mejor el sql query que te pusieron antes y yo use
2- deberias guardar las passwords encriptadas y no planas
3- siempre debes sanitizar los datos antes de usarlos

Saludos y espero que te sea de utilidad el codigo
  #6 (permalink)  
Antiguo 12/06/2008, 16:21
 
Fecha de Ingreso: marzo-2008
Mensajes: 48
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problema con las Sesiones

Vale muchas gracias a todos de verdad. La solución al problema que puse en #4 era poner la variable $_SESSION[usuario] en vez de $_SESSION['usuario']. Joder que rayada por una tonteria. Gracias
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 11:40.