Foros del Web » Programando para Internet » PHP »

problema con sesiones

Estas en el tema de problema con sesiones en el foro de PHP en Foros del Web. buenas, tengo un problema con las sesiones... El caso es que llego a principal.php desde una pagina de login.el problema viene en que en principal ...
  #1 (permalink)  
Antiguo 19/12/2005, 07:14
 
Fecha de Ingreso: noviembre-2005
Mensajes: 139
Antigüedad: 12 años
Puntos: 0
problema con sesiones

buenas, tengo un problema con las sesiones...
El caso es que llego a principal.php desde una pagina de login.el problema viene en que en principal tengo un formulario que me pasa a otra pagina:"muestra.php.En esta pagina intento obtener el nombre de usuario(guardado como variable de sesion) y no me lo obtiene.
Pongo aqui los trozos de codigo relativos a la sesion:
principal.php:
Código PHP:
$link mysql_connect($host,$user,$password);
mysql_select_db($nombreBD,$link);
//busco un usuario con esos datos
$busco "SELECT * FROM $tabla WHERE usuario='$usuariolog' and contrasenia='$contrasenialog'";
//Ejecuto la sentencia
$siono mysql_query($busco,$link);
if (
mysql_num_rows($siono)!=0){
    
//usuario y contraseña válidos
    //defino una sesion y guardo datos
    
session_start();
    
$_SESSION['usuario']=$_POST[$usuariolog];
    print (
"bienvenido $usuariolog <br>");

    
$fecha =date("d/m/Y | H:i:s");
    
setcookie("fecha",$fecha,time()+172800);// esta cookie dura 2 dias, tiene
                                            //por nombre fecha y como valor
                                            //la variable $fecha
    
if(isset($HTTP_COOKIE_VARS["fecha"]))//si la cookie existe
    
{
    echo 
"Tu última visita fue el ".$HTTP_COOKIE_VARS["fecha"];
    print(
"<br>");
    }
    else
    {
    echo 
"Es la primera ves que me visitas";
    }


}else {
    
//si no existe le mando otra vez a la portada
    
header("Location:mallog.php");
    }
mysql_close($link); 
muestra.php:
Código PHP:
<?php
session_start
();
    
$usuariolog=$_SESSION['usuario'];
    print (
"bienvenido $usuariolog <br>");

if(isset(
$HTTP_COOKIE_VARS["fecha"]))//si la cookie existe
    
{
    echo 
"Tu última visita fue el ".$HTTP_COOKIE_VARS["fecha"];
    print(
"<br>");
    }
    else
    {
    echo 
"Es la primera ves que me visitas";
    }
gracias
  #2 (permalink)  
Antiguo 19/12/2005, 07:27
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Prueba de hacer un session_write_close(); antes de redireccionar a muestra.php
En algunos sitios lo recomiendan.
  #3 (permalink)  
Antiguo 19/12/2005, 08:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Tienes una gran confusión con el manejo de variables externas de un script .. confundes y mezclas lo que son los arrays superglobales con los que no lo son y con acceso "global" a estas ... Además accedes de forma incorrecta a los iindices de tus variables cuando lo haces por los arrays superglobales que son eso mismo: array (arreglo, matrices .. ).

Algunos de esos errores son:

Cita:
setcookie("fecha",$fecha,time()+172800);// esta cookie dura 2 dias, tiene
//por nombre fecha y como valor
//la variable $fecha
if(isset($HTTP_COOKIE_VARS["fecha"]))//si la cookie existe
{
echo "Tu última visita fue el ".$HTTP_COOKIE_VARS["fecha"];
print("<br>");
}
else
{
echo "Es la primera ves que me visitas";
}
Ese proceso no es correcto. Es decir .. una cookie no quedará disponible su valor hasta la próxima iteracción con el servidor: recarga de página, linkear hacia otra página .. etc.

Tampoco deberías mezclar el uso de los arrays globales (como $_SESSION .. )y los no globales como $HTTP_COOKIE_VARS .. usa $_COOKIE para acceder a tus cookies.

Lo correcto sería:
Código PHP:
    if(isset($_COOKIE["fecha"]))//si la cookie existe 
    

    echo 
"Tu última visita fue el ".$_COOKIE["fecha"]; 
    print(
"<br>"); 
    } 
    else 
    {
    
    echo 
"Es la primera ves que me visitas"
    } 

// Si se trata de crear la cookie o actualizarla (su valor) en cualquier caso .. define el valor de tu cookie despues de validar si existe:

setcookie("fecha",$fecha,time()+172800);// esta cookie dura 2 dias, tiene 
                                            //por nombre fecha y como valor 
                                            //la variable $fecha 
Ojo también con dar valor de fecha tipo:
Cita:
$fecha =date("d/m/Y | H:i:s");
Sobre todo con el caracter / y el | .. no sé si tendrás que codificarlo con urlencode() y luego aplicar un urldecode() para no tener problemas (revisalo).

Podrías usar un TIMESTAMP como el que dá time() simplemente (te resultará más fácil operar con ese dato y formatearlo si lo deseas con date() si tienes que presentar dicho dato).

OJO con:
Cita:
header("Location:mallog.php");
usa un espacio detras del : del Location .. sino tendrás problemas (con IIS parece que los dá si es que lo usases alguna vez) y usa en exit; tras cada "Location" por que la finalidad es terminar la ejecución de ese script y cambiar a otro en caso de que suceda tal evento:
Código PHP:
header("Location: mallog.php");
exit; 

Todo esto no es correcto, .. sobre el tratamiento de tus variables que vienen de tu formulario de login en método POST:

Cita:
//busco un usuario con esos datos
$busco = "SELECT * FROM $tabla WHERE usuario='$usuariolog' and contrasenia='$contrasenialog'";
//Ejecuto la sentencia
$siono = mysql_query($busco,$link);
if (mysql_num_rows($siono)!=0){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
$_SESSION['usuario']=$_POST[$usuariolog];
print ("bienvenido $usuariolog <br>");
Sería:
Código PHP:
//busco un usuario con esos datos 
$busco "SELECT * FROM $tabla WHERE usuario='".$_POST['usuariolog']."' and contrasenia='".$_POST['contrasenialog']."'"
//Ejecuto la sentencia 
$siono mysql_query($busco,$link); 
if (
mysql_num_rows($siono)!=0){ 
    
//usuario y contraseña válidos 
    //defino una sesion y guardo datos 
    
session_start(); 
    
$_SESSION['usuario']=$_POST['usuariolog']; 
    echo 
"bienvenido ".$_POST['usuariolog']."<br>"
Cuando adaptes el código y corrijas todos esos problemas .. pruebalo nuevamente. Esto no asegura que funcionen las sesiones como esperas por qué el hecho de que funcionen las sesiones dependen también de como propagas el SID que no sé vé que lo hagas manualmente .. así que "supones" y dejas a PHP que lo haga automáticamente, por ende .. tendrías que verificar configuración de PHP sobre sesiones para ver como tu configuración concreta lo está haciendo.

Un saludo,

Última edición por Cluster; 19/12/2005 a las 08:31
  #4 (permalink)  
Antiguo 19/12/2005, 10:59
 
Fecha de Ingreso: noviembre-2005
Mensajes: 139
Antigüedad: 12 años
Puntos: 0
Muchas gracias Cluster...funciona perfecto.
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:15.