Foros del Web » Programando para Internet » PHP »

Problemas con las sessiones ( de nuevo)

Estas en el tema de Problemas con las sessiones ( de nuevo) en el foro de PHP en Foros del Web. La última vez que escribí aquí me solucionaron el problema que tenía pero parece ser que algo hago mal y no veo que debe ser, ...
  #1 (permalink)  
Antiguo 04/12/2002, 06:29
Avatar de dabogar  
Fecha de Ingreso: diciembre-2002
Ubicación: Valenciaaaa es la tierra de las flores ...
Mensajes: 33
Antigüedad: 15 años
Puntos: 0
Problemas con las sessiones ( de nuevo)

La última vez que escribí aquí me solucionaron el problema que tenía pero parece ser que algo hago mal y no veo que debe ser, a ver si sus ojos más expertos me ayudan a ver el error.

< login.php >
Código PHP:
<?php
session_start
();
......
$_SESSION['nombre']=$row_login['nombre'];
$_SESSION['tipo_usuario']=$row_login['tipo_usuario']; 
......
if ( 
$totalRows_login == ) {
    
    echo 
".......";
}
else {
    
header("Location:marco.htm");
}   
?>
< main.php >
Código PHP:
<?php
session_start
();
?>
<HTML> 
......
<?php echo $_SESSION['nombre']; ?>
......
</HTML>
Tras lo cual, la primera vez que se carga el archivo login.php que redirige automáticamente la pagina main.php, no se crea correctamente la variable de sesión, ya que me devuelve Notice: Undefined index: nombre in e:\inetpub\wwwroot\gromero\main.php on line 59.

Vuelvo atrás, vuelvo a hacer LOGIN y entonces coge correctamente la variable de sesión.

El problema está en LOGIN.PHP, ya que he comprobado que siempre que sea la segunda vez que se cargue la variable de sesión la coge correctamente.

¿Alguna idea? Me estoy volviendo LOCAAAAAAAAAAAAA
  #2 (permalink)  
Antiguo 04/12/2002, 06:39
 
Fecha de Ingreso: julio-2002
Ubicación: Elche
Mensajes: 153
Antigüedad: 15 años, 5 meses
Puntos: 0
¿Has registrado las variables con session_register()?
__________________
Hazlo o no lo hagas, pero nunca lo intentes

www.clubfronteniselche.com
  #3 (permalink)  
Antiguo 04/12/2002, 06:48
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

No veo donde haces la redireccion al main.php en login.php, a no ser que sea a marcos.html. Si es asi es que $totalrow_login es cero, con lo que es posible que cuando estes asignando el valor a la variable de sesion 'nombre' le estes dando el valor de NULL. Y no se si PHP toma NULL como un valor valido, si no lo toma posiblemente no este creando la variable de sesion. Por eso te esta dando el aviso de que no existe el indice. Pero no tiene que ser un error. Si quieres que no te salga este notice puedes usar la funcion array_key_exists() antes del echo para elegir que sacar. Tambien puedes evitar que PHP te muestre los notice, bien en el php.ini la directiva error_reporting, bien a nivel de script con la funcion error_reporting().

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 04/12/2002, 06:52
 
Fecha de Ingreso: julio-2002
Ubicación: Elche
Mensajes: 153
Antigüedad: 15 años, 5 meses
Puntos: 0
Esto es lo que yo hice

Para el fichero login:
<?php
/* A este fichero le llega el formulario con el usuario y el pass */

/* Antes de comenzar la sesión compruebo que el usuario y el
pass son váldos */

if(validos($user, $pass)
{
session_start(); //Con esto empiezas la sesión

session_register("user"); //Aquí guardas las variables
session_register("pass");//que te pasan del formulario
}
?>

Para cualquier otro fichero:
<?php
session_start();

/* Si el login ha sido correcto y se han registrado las variables
aquí podrás acceder a las variables registradas directamente */

echo "Has entrado como usuario ".$user;
?>


A mi con esto me ha funcionado, si no lo entiendes o no te sirve me explicas que es lo que quieres hacer.


Un saludo.
__________________
Hazlo o no lo hagas, pero nunca lo intentes

www.clubfronteniselche.com
  #5 (permalink)  
Antiguo 04/12/2002, 06:57
Avatar de dabogar  
Fecha de Ingreso: diciembre-2002
Ubicación: Valenciaaaa es la tierra de las flores ...
Mensajes: 33
Antigüedad: 15 años
Puntos: 0
Había leído en el FAQ q simplemente con session_start() , cuando trabajabas con sesiones era suficiente, tengo PHP 4.2.6.

Pero de todas formas he probado ahora mismo a utilizar session_register('variable'), y nada el mismo resultado, la 2ª vez que se carga el archivo login.php entonces coge correctamente la varible ....

Collons que complicado es el PHP!!!!!
  #6 (permalink)  
Antiguo 04/12/2002, 07:02
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Mirad lo que pone en los comentarios de los usuarios en http://www.php.net/manual/en/functio...rite-close.php . Segun eso siempre hay que llamar la funcion session_write_close() antes de un header("Location: "); o no se guardan las variables de sesion.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 04/12/2002, 07:20
 
Fecha de Ingreso: julio-2002
Ubicación: Elche
Mensajes: 153
Antigüedad: 15 años, 5 meses
Puntos: 0
No entiendo entonces el problema,
¿Has pobrado con ficheros más simples de prueba?
Pon un formulario registra una variable que pases y prueba de nuevo a registrarla a ver si la pasa bien:

prueba1.php:
<?php
if(!isset($op))
{
echo "
<form action="prueba1.php?op=1" method="post">
Usuario: <input type="text" name="user">
<input type="submit" value="Reg">
</form>
";
}
else
{
session_start(); //Con esto empiezas la sesión

session_register("user"); //Aquí guardas las variables
session_register("pass");//que te pasan del formulario

echo "
<a href="prueba2.php">Probar</a>
";
}
?>

prueba2.php:
<?php
session_start();

echo $user;
?>

Prueba esto y a ver si te funciona.

Un saludo.
__________________
Hazlo o no lo hagas, pero nunca lo intentes

www.clubfronteniselche.com
  #8 (permalink)  
Antiguo 04/12/2002, 07:57
Avatar de dabogar  
Fecha de Ingreso: diciembre-2002
Ubicación: Valenciaaaa es la tierra de las flores ...
Mensajes: 33
Antigüedad: 15 años
Puntos: 0
Respuestas Varias

josemi:

1. Si, marco.html como su nombre indica contiene al marco main.php, y $totalrow_login no es cero ya que el login/pass existe en la BDA, y en el caso de no existir simplemente muestra un mensaje y tienes que vovler a intentar hacer Login, no he puesto el código por ser simplemente HTML.

2.He probado la función session_write_close ( void) pero nada, como dice un comentario más abajo...
You do not need to call this before a Header( "location:..."); I do it in many places with no problems at all on 4.2.2

DaneelR:

He copiado y cambiado los errores que tenia el ejemplo que has puesto (basicamente que no definias el valor de la variable de sesion y al hacer le echo no ponias la \ para escribir la ") el código es este...
Código PHP:
<?php
if(!isset($op))
{
echo 
"<form action=\"prueba1.php?op=1\" method=\"post\">
Usuario: <input type=\"text\" name=\"user\"><input type=\"submit\" value=\"Reg\">
</form>"
;
}
else
{
session_start(); //Con esto empiezas la sesión
session_register("user"); //Aquí guardas las variables
$_SESSION["user"]=$_POST["user"];

echo 
" <a href=\"prueba2.php\">Probar</a>";
}
?>
Y al introducir un nombre en el form y submit, vuelve a prueba1.php, pero muestra el form, no el ELSE.

No será q mi PHP no se aclara mu bien las sessiones

Hay q pena !!!
  #9 (permalink)  
Antiguo 04/12/2002, 09:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En todos los ejemplos q veo .. se está asumiendo que propagas el SID (Id unico de session) automático (osese, tu en tu código no lo propagas a mano ...)

Revisa en tu php.ini el estado de la directiva:
session.use_trans_sid = 1
(a 1 es como deberias tenerlo segun los códigos q usa (en las FAQ's que leistes se hacia mencion a esto ..).

Otra directiva que tendras que revisar es tu:
register_globals = ON

En el último ejemplo q pusistes haces esto:

session_register("user"); //Aquí guardas las variables
$_SESSION["user"]=$_POST["user"];

Usa uno u otro método pero no los dos .. El segundo es el deberias usar ... El el session_register .. estas asumiendo que user es gobal .. osese q si haces un echo $user; antes del register verias su valor ..

Tambien hay q ver como llamas a tu codigo este: (el último ejemplo):

prueba1.php
<?php
if(!isset($op))
{
echo "<form action=\"prueba1.php?op=1\" method=\"post\">
Usuario: <input type=\"text\" name=\"user\"><input type=\"submit\" value=\"Reg\">
</form>";
}
else
{
session_start(); //Con esto empiezas la sesión
session_register("user"); //Aquí guardas las variables
$_SESSION["user"]=$_POST["user"];

echo " <a href=\"prueba2.php\">Probar</a>";
}
?>

le tendras q pasar o definir al menos la variable $op ?¿ .. Si el ejemplo q quieres hacer es q registre o te lea la variable USER de tu session para mostrarte el link de hacia prueba2.php deberias hacer:

prueba1.php
Código PHP:
<?php
session_start
(); //inicio del uso de sessiones. 
// Si no lo inicias no podras acceder a ninguna variable de session.
// lo inicio al principio del script, pues o bien se ha de leer una variable de session.
// o se ha de registrar una variable en la session.

if(!isset($_SESSION['user']))
{
echo 
"<form action=\"prueba1.php?op=1\" method=\"post\">
Usuario: <input type=\"text\" name=\"user\">
<input type=\"submit\" value=\"Reg\">
</form>"
;
}
else
{
$_SESSION["user"]=$_POST["user"];

echo 
"<a href=\"prueba2.php\">Probar</a>";
}
?>

Un saludo,
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 19:05.