Foros del Web » Programando para Internet » PHP »

No me lee variables de sesión en este sencillo ejemplo

Estas en el tema de No me lee variables de sesión en este sencillo ejemplo en el foro de PHP en Foros del Web. Es un ejercicio de un libro. Tengo dos páginas con el sgte código: page1.php: Código PHP: <?php  session_start (); ?> <html> <head> <title>Documento sin t&iacute;tulo</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> ...
  #1 (permalink)  
Antiguo 31/10/2005, 14:39
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Pregunta No me lee variables de sesión en este sencillo ejemplo

Es un ejercicio de un libro. Tengo dos páginas con el sgte código:

page1.php:
Código PHP:
<?php 
session_start
();
?>
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php 
    
    
    $_SESSION
['varSesion'] = "Hola mundo!";
    
    echo 
'El contenido de $_SESSION[\'varSesion\'] es: '.$_SESSION["varSesion"].'<br />';
    
?>
<a href="page2.php">P&aacute;gina siguiente</a> 
</body>
</html>
page2.php:
Código PHP:
<?php 
session_start
();
?>
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php 
    
    
echo 'El contenido de $_SESSION[\'varSesion\'] es: '.$_SESSION["varSesion"].'<br />';
    
    unset(
$_SESSION['varSesion']);
    
    
session_destroy();    
?>
</body>
</html>


El problema es que al llamar a page2.php desde page1.php no se visualiza la variable de sesión varSesion.

También tuve que hacer cambios respecto al libro, ya que si ponía session_start en el script de abajo, después de <html> y <head>, me salía esta advertencia:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started .......
Aunque esto ya lo he solucionado poniendo session_start() en un script al principio de todo. Pero lo que quisiera saber es por qué motivo puede ser que no me lea la variable de sesión en page2.php
  #2 (permalink)  
Antiguo 31/10/2005, 15:10
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años, 5 meses
Puntos: 2
Qué versión tienes de PHP?. Ten en cuenta que las variables superglobales como $_SESSION aparecieron por primera vez en la versión 4.1.0
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #3 (permalink)  
Antiguo 31/10/2005, 18:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
En page1.php .. no puedes esperar leer el valor real de tu variable de sesión en el mismo script que le asignas un valor; las variables de sesión sólo quedan disponibles en la próxima llamada a tu script/recarga del mismo.

El session_start() debe estar en todo script que acceda o dé valor a variables de sesión y antes de cualquier otra salida al navegador: nada de HTML, o un echo "algo" .. o un espacio antes de <? .. o un salto de línea antes de <?.

Justamente .. todos los mensajes de error que has omitido ahí se encuentra el problema y tu solución .. Si lo indicas textualmente (con los n° de línea que ahí se te indican) se podrá ver mejor la solución o el problema.

Un saludo,
  #4 (permalink)  
Antiguo 01/11/2005, 11:34
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Hola, primero que nada gracias por vuestra ayuda.

Bueno, ahora mismo estoy usando la versión 5.0.5 de PHP, así que la variable superglobal $_SESSION me la reconoce.

Cluster, precisamente es en la primera página donde sí que me lee el valor de $_SESSION['varSesion'] y lo muestra en pantalla. En cambio en la segunda página no me lo lee. El problema del que me hablas del mensaje de error ya lo había solucionado como digo en el primer mensaje, poniendo session_start() al principio del documento. Lo había escrito como algo anecdótico.

Pero lo que realmente quiero saber es por qué al hacer session_start() en la segunda página, no se recupera la variable de sesión para que esté disponible.

Alguna idea sobre esto?
  #5 (permalink)  
Antiguo 01/11/2005, 12:34
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
No es posible que haya que configurar alguna cosa en la sección [Session] del archivo php.ini para que funcionen bien las sesiones? Alguno de vosotros tuvo que hacer algo en php.ini para que las sesiones funcionasen?

Pongo todas las directivas de la sección [Session] que tengo en mi php.ini a ver si hay algo que veais que debería cambiar:

Código:
session.save_handler = "D:\xampp\tmp"  (esto lo he cambiado. Antes tenía lo siguiente: session.save_handler = files)

session.save_path = "D:\xampp\tmp"

session.use_cookies = 1

session.name = PHPSESSID

session.auto_start = 0

session.cookie_lifetime = 0

session.cookie_path = /

session.cookie_domain =

session.serialize_handler = php

session.gc_probability = 1
session.gc_divisor     = 100

session.gc_maxlifetime = 1440

session.bug_compat_42 = 1
session.bug_compat_warn = 1

session.referer_check =

session.entropy_length = 0

session.entropy_file =

session.cache_limiter = nocache

session.cache_expire = 180

session.use_trans_sid = 0

session.hash_function = 0

session.hash_bits_per_character = 4
  #6 (permalink)  
Antiguo 01/11/2005, 14:40
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 20 años, 6 meses
Puntos: 0
Te paso mis directivas de PHP para sesiones para ver si te sirven

session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid Off Off

Suerte
  #7 (permalink)  
Antiguo 02/11/2005, 09:07
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Hola Javifo, gracias por la respuesta. Lo he intentado como tu dices, pero aún no me sale. Bueno, en realidad no lo he escrito tal cual lo tienes, porque no entiendo cómo es que repites los valores de las directrices en cada línea.

Como puedes ver arriba, mi php.ini asigna por defecto valores a las directivas con un igual (=), p.ej: session.use_cookies = 1. Lo que sí he hecho es cambiar en donde tengo 0 por Off y donde tengo 1 por On.

Aún así, sigo en las mismas. A tí si que te funcionan las sesiones? Es extraño. No hay más posibilidades? Alguien sabe alguna posibilidad más?
  #8 (permalink)  
Antiguo 02/11/2005, 10:34
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 20 años, 6 meses
Puntos: 0
Atención:

Lo que te pasé es lo que dice sobre sesiones al hacer un pho.info. No es exactamente lo que puedes ver en tu php ini.

Lo digo por los cambios que has hecho.
  #9 (permalink)  
Antiguo 02/11/2005, 12:16
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 2 meses
Puntos: 7
Primero debes llamar la variable y luego mostrarla:
Código PHP:
<?php
    session_start
();
    
$_SESSION['varSesion'];
    echo 
"El contenido de $_SESSION['varSesion'] es: ".$_SESSION['varSesion'].'<br />'
?>
__________________
Gracias de todas todas
-----
Linux!
  #10 (permalink)  
Antiguo 02/11/2005, 14:23
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Javifo, estos son los datos de sesión que me da phpinfo():

Session Support enabled
Registered save handlers files user sqlite
Registered serializer handlers php php_binary wddx

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 4 4
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path D:\xampp\tmp D:\xampp\tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0


cacr, estás seguro de eso? en la declaración de echo ya se produce la llamada a la variable para visualizarse. Bueno, el caso es que sigue sin salirme con tu método. Pero lo más extraño de todo, si os fijais he puesto como save_path de las id. de sesiones en D:\xampp\tmp. Pues bien, hay un montón de archivos de id de sesión, pero muchos de ellos de 0kb, o sea, sin ningún valor, y unos cuantos con 1kb. No tienen extensión txt como una cookie. En realidad no parecen tener ninguna extensión. De todas formas los de 1kb los abro con el bloc de notas y me salen datos como este: varSesion|s:11:"Hola mundo!";

Ya no sé qué hacer. Por favor! Qué es lo que está pasando?

Última edición por Tigervlc; 02/11/2005 a las 14:32
  #11 (permalink)  
Antiguo 02/11/2005, 16:05
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Para más información, he cambiado session.save_path a "/tmp" como javifo. Lo que pasa cuando abro page1.php es lo siguiente:

Se crea un archivo en /tmp como el que sigue:

sess_dd9ac15b8f641680a98f50269cc1693f

con la siguiente información: varSesion|s:11:"Hola mundo!";

Cuando desde page1.php, hago click en el enlace a page2.php se crea un segundo archivo parecido en el mismo directorio (el id es una cadena hash de MD5):

sess_c16d3b6f9557870b795fb4a56cd65cbb

sin ninguna información, 0 bytes.

Entiendo, o creo entender, que cuando llamo a page1.php se crea una id de sesión, en el primer archivo. Y cuando llamo a page2.php, se crea otro archivo sin información, en vez de leer la variable de sesión desde el primero.

Qué puedo hacer más para solucionarlo. Alguien tiene idea de qué pasa?
  #12 (permalink)  
Antiguo 03/11/2005, 01:08
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 20 años, 6 meses
Puntos: 0
He probado tus scripts y me funcionan perfectamente.

Me muestra el contenido de page2.php.

Al entrar en page1.php crea la sesión con la información varSesion|s:11:"Hola mundo!";

Al entrar en page2.php borra la sesion (es lo que tú buscas), PERO NO CREA NINGUNA OTRA.

O sea, que el comportamiento es distinto. En mi caso, es correcto mientras que en el tuyo no hace lo que debe.

Si se te crea una sesion DISTINTA y vacía al entrar en page.2.php esta nueva sesion te la debe crear session_start(); de pag2.php y es con la que trabaja el script. Como en esta sesion no hay nada, no te muestra nada.
Esto es lo que tú mismo dices que crees que pasa.

Puedes probar lo que dice crac:hacer en page2.php
session_start();
$_SESSION['varSesion'];

A mí esto me deja una sesion vacía em temp, pero el script funciona.

Para asegurarte de si llega o no la variabe puedes hacer en page2.php:
session_start();
echo $_SESSION["varSesion"];
Si te llega, esto te mostrará el contenido.
Pero lo más probable es que a tí no te llegue.
Otra cosa que puedes probar es hacer session register en page1.php y ver que pasa.

De todas formas, debes tener algún problema de configuración. Veo que info.php te da más directrices que a mí. No se si por ahi puedes encontrar el problema.

Última edición por javifo; 03/11/2005 a las 01:49
  #13 (permalink)  
Antiguo 03/11/2005, 03:55
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
No me lo explico, lo he probado en otro ordenador y sí que me funcionan las sesiones. En este caso las directivas son muy parecidas, y también tiene dos directivas más que tu, Javifo, las que indican cómo debe ser el hash de la ID de sesión, o sea, que por tener dos directivas más no quiere decir nada, tal vez una versión diferente. Aquí están las directivas de PHP en el ordenador que sí que usa bien las sesiones:

Session Support enabled
Registered save handlers files user sqlite
Registered serializer handlers php php_binary wddx

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path C:/Servidor/PHP/sessions/ C:/Servidor/PHP/sessions/
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0

Lo único que cambia es que en el nuevo, tengo
session.bug_compat_42 Off Off y en el que no va:
session.bug_compat_42 On On

session.gc_divisor 1000 1000 en el que va, y en el que no va:
session.gc_divisor 100 100

session.hash_bits_per_character 5 5 en el que va, y en el otro
session.hash_bits_per_character 4 4

session.save_path C:/Servidor/PHP/sessions/ C:/Servidor/PHP/sessions/ en el que funcionan las sesiones, y en el otro
session.save_path /tmp /tmp (me lo puse igual que tu, y creé esa estructura de directorio).

Estoy empezando a pensar que tal vez no sea algo de php.ini. Hay otras posibilidades? En este ordenador, donde funciona bien, instalé Apache, PHP y MySQL tal cual. En el otro lo hice por medio de una herramienta llamada xampp de http://www.apachefriends.org que es un paquete que incluye la instalación completa y preconfigurada de muchas aplicaciones de desarrollo web, incluyendo Apache, PHP y MySQL, pero también PHPMyAdmin y otros muchos. También, en este PC tengo la versión PHP 5.0.0. En el que no va, la versión 5.0.5

A ver si alguien me da una alegría y me dice la solución.
  #14 (permalink)  
Antiguo 03/11/2005, 05:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cuando dices que has probado en "otro ordenador" te refieres a qué concretamente:

1) Usando PHP configurado en otro PC como servidor.
2) usando como "Cliente" otros PC's (y navegadores).

En cualquier caso, .. en el tema de sesiones hay un tema muy importante que no sé si conoces: La propagación del SID.

El SID es el Identificador Único de sesión (ese i9807asdf8979asdf98 que ves como nombre de archivo de sesión cuando las creas en tu servidor).

El SID se propaga por dos métodos:
1) URL
2) Cookies

En tu configuración (en la última que dejastes) propagas el SID en cookies:

Cita:
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0
Por ende, necesitas de un navegador que acepte cookies (de "sesión" concretamente) .. Revisa tu navegador como acepta cookies (y nivel de "seguridad" que influye) .. a su vez, ten presente que algunos firewall's .. o antivirus e incluso esas "barras de google, yahoo ..etc" pueden estar bloqueando las cookies que PHP necesita generar para propagar el SID.

En las FAQ's de este foro tienen otra pequeña explicación sobre sesiones .. también todo esto está descrito en la "teoría" de como funcionan las sesiones para PHP. (www.php.net/session)

Un saludo,

Un saludo,
  #15 (permalink)  
Antiguo 03/11/2005, 07:15
 
Fecha de Ingreso: diciembre-2004
Mensajes: 36
Antigüedad: 19 años, 10 meses
Puntos: 1
Sonrisa Variable session funciona correctamente

Hola Tigervlc, espero poner mi granito de arena sobre este problemita que cada vez más se está agrandando. Hice pruebas con tu codigo creando mis páginas "page1.php" y "page2.php" y me funcionan correctamente el valor de $_SESSION['varSesion']= "Hola mundo!" me imprime en las dos paginas, no se cual será tu error. Pero yo estoy trabajando con la version de php 4.3.10, EasyPHP1-8 y dreamweaver. Realizo pequeños sistemas en php y no tengo problemas con las sessiones. Prueba en instalar en tu pc el EasyPHP1-8 configurarlo como tu localhost y programar, es sencillo. Espero haber contribuydo en algo. Me despido, hasta pronto

p.d. cualquier asunto me escribes al foro
  #16 (permalink)  
Antiguo 03/11/2005, 10:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Yo insisto una vez más que hay que conocer como trabaja PHP cuando usas sesiones.

No se trata de cambiar de usar algún pre-instalador de PHP por qué "a lo mejor" ese deja la configuración de PHP de otra forma .. sino en averigüar el problema.

Ya hice mi comentario al respecto sobre la propagación del SID .. Si quieren hacer pruebas para descartar problemas con la propagación del SID en cookies, propaga el SID en el URL -manualmente-

Un saludo,
  #17 (permalink)  
Antiguo 03/11/2005, 13:33
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Sí que conozco el SID (siglas de session identifier), y como dices, lo tengo configurado para que sólo use cookies, pero no he mirado el tema de cookies en el navegador. Hasta el momento no he tenido problemas con cookies en otras webs. Me las acepta. Así que no es muy probable que sea por eso. Y ya leí que es preferible pasar el SID por cookie que por URL. Pero voy a mirar las opciones de internet del explorer y voy a probarlo con el netscape también.

Si no, lo que haré será desinstalar todo el xampp, y reinstalar manualmente php, apache y mysql. Ya os digo algo. Tampoco descarto el EasyPHP1-8. De qué se trata eso? Es un paquete instalador de todas esas aplicaciones?

Por cierto, con el otro ordenador me refiero a otro PC diferente y no conectado a este donde no funciona. En ambos instalé Apache, PHP y MySQL para practicar.
  #18 (permalink)  
Antiguo 03/11/2005, 14:09
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
POOOORRRRRRR FIIIIIIIIINNNN!!! Estoy de contento que no me aguanto!

No se me pasó antes que el Zone Alarm de los cojones tendría algo que ver porque se supone que el Zone Alarm bloquea accesos externos, no accesos que se producen dentro del propio PC sin salir al exterior, pero lo hace.

Gracias por la idea de algún programa que bloquease. Cuando he probado con el Netscape y pasaba lo mismo he pensado que la culpa tampoco era del navegador. No tenía más remedio que ser algún bloqueador o algún firewall. En este tengo Zone Alarm. En el que funciona bien las sesiones, tengo el Sygate.

Alguien de vosotros usa Zone Alarm y le funciona bien las sesiones? Si es así, cómo lo habeis configurado? Aunque lo más seguro que no me caliente la cabeza y me instale el Sygate aquí también, que no está nada mal.

Bueno....(suspiro)...Muchas gracias a todos por la ayuda constante. Al fin lo he conseguido gracias a vuestras pistas.

Un saludo a todos!
  #19 (permalink)  
Antiguo 03/11/2005, 14:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por Tigervlc
POOOORRRRRRR FIIIIIIIIINNNN!!! Estoy de contento que no me aguanto!

No se me pasó antes que el Zone Alarm de los cojones tendría algo que ver porque se supone que el Zone Alarm bloquea accesos externos, no accesos que se producen dentro del propio PC sin salir al exterior, pero lo hace.

Gracias por la idea de algún programa que bloquease. Cuando he probado con el Netscape y pasaba lo mismo he pensado que la culpa tampoco era del navegador. No tenía más remedio que ser algún bloqueador o algún firewall. En este tengo Zone Alarm. En el que funciona bien las sesiones, tengo el Sygate.

Alguien de vosotros usa Zone Alarm y le funciona bien las sesiones? Si es así, cómo lo habeis configurado? Aunque lo más seguro que no me caliente la cabeza y me instale el Sygate aquí también, que no está nada mal.

Bueno....(suspiro)...Muchas gracias a todos por la ayuda constante. Al fin lo he conseguido gracias a vuestras pistas.

Un saludo a todos!
Tenemos un foro dedicado al tema:
"Gestión de firewall, puertos y ...."

Podrías consultar allá sobre la configuración óptima.

Un saludo,
  #20 (permalink)  
Antiguo 03/11/2005, 14:46
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
ok, le echaré una ojeada y tal vez pregunte cómo configurar Zone Alarm para usar sesiones en PHP.

Un saludo de nuevo Cluster!
  #21 (permalink)  
Antiguo 04/11/2005, 11:48
 
Fecha de Ingreso: diciembre-2004
Mensajes: 36
Antigüedad: 19 años, 10 meses
Puntos: 1
Me alegra mucho que el problema esté solucionado
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 22:09.