Por qué se pierden las variables de sesión PHP

¿Algo de esto te pasó alguna vez?

Estoy haciendo un login y todo va perfecto hasta el momento que al subirlo a mi ftp comprueba que el usuario este registrado y que el password este correcto y me crea una variable de session pero en las paginas donde accedo despues del login no reciben esa variable de session y por ello no me deja verlo


Tengo unas paginas que intercambian variables de sesion entre ellas y cuando en una pagina en especifico le doy al boton que me redirecciona a otro lugar la session se pierde (ando poniendo session_start() en todos los inicios de las paginas).


Durante meses estuvo funcionando bien hasta que los que me proveen el servicio de hosting se les ocurrio cambiar el servidor, a partir de ahi las variables $_SESSION llegan vacias a las otras paginas.


Pocas cosas hay más frustrantes que ir a buscar algo donde sabés que lo dejaste y en cambio… no encontrar nada, ¿cierto?

Cuando pasa algo como esto, es natural buscar el problema dentro de tu código pero… ¿qué pasa cuando todo se ve bien?

Ahí está el session_start(), las variables tienen valor, se almacenan en $_SESSION pero… por alguna razón misteriosa la página se resiste.

Es más, si el mismo código funciona perfectamente en tu XAMPP pero en tu hosting no… es claro que el problema está en otro lado.

En este artículo voy a explorar las razones más frecuentes para que esta situación se suceda y cómo podés solucionarla.

Si no lo tenés muy claro te sugiero comenzar por entender bien cómo funcionan las sesiones de PHP.

Te dejo las preguntas que deberías hacerte:

¿Todas las páginas tienen el session_start?

En realidad, no es necesario que todas las páginas lo tengan… de hecho, hasta puede ser contraproducente.

Lo que es seguro es que todas las páginas donde necesites guardar o leer información de la sesión deben invocar esta función.

¿La llamada a session_start está antes de enviar contenido al cliente?

Esta pregunta puede parecer poco sensata. Después de todo, si la llamada a session_start estuviese después de enviar código al cliente verías un error como:

PHP Warning: session_start(): Cannot start session when headers already sent

¿no?

Pues… no necesariamente.

El error se producirá, eso es seguro, pero que lo veas o no en pantalla depende de lo que figure en tu archivo php.ini (Específicamente en la entrada display_errors).

¿El valor de session.use_cookies es 1?

Esta configuración determina que el mecanismo de propagación del ID de sesión sea el uso de una cookie.

Muchas veces ocurre que el valor que tenés en tu entorno local no se condice con el del hosting.

¿El navegador está generando la cookie de sesión?

Esto es fácil de verificar: usualmente esta cookie se llama PHPSESSID (aunque este nombre puede modificarse, también a través del archivo php.ini o la función ini_set).

Si esto no sucede habría que probar si otras cookies se están generando (Lo más probable es que no).

Esto puede deberse a la configuración del navegador (Que no acepta cookies).

La verdad es que en este caso no hay mucho que puedas hacer… más allá de pedir por favor a los visitantes del sitio que habiliten las cookies.

La buena noticia es que la gran mayoría sí lo harán 🙂

¿Cuál es el valor de session.cookie_lifetime?

La configuración session.cookie_lifetime determina cuánto tiempo debe el navegador mantener la cookie de sesión.

Si este tiempo es pequeño la cookie no vivirá lo suficiente como para llegar a la siguiente página.

¿La interacción desde el frontend es muy larga?

Este es un problema que se da mucho en las SPA (Aplicación de una única página) donde casi toda la interacción se da a través de JavaScript.

Si no se realiza ningún pedido al servidor en mucho tiempo se corre el riesgo de que la sesión se considere inactiva y se cierre automáticamente.

En este artículo podés ver un ejemplo de esto (y cómo solucionarlo).

¿Qué valor tiene session.save_path?

Esta configuración determina dónde se almacenan los archivos de sesión (asumiendo, claro, que el mecanismo de almacenamiento elegido sea en archivos).

Si este valor es incorrecto no habrá dónde guardar la información.

Si el valor corresponde a un directorio existente en tu servidor la siguiente pregunta es ¿los archivos de sesión están ahí?

Si no están es probable que haya un problema de permisos: debes validar que el usuario con el que ejecuta tu servidor web sea capaz de escribir allí.

Conclusión

Si estás teniendo problemas para recuperar las variables de sesión es muy probable que se deba a fallas en la configuración de tu entorno, no desesperes: todo tiene solución 🙂

mchojrin

2 comentarios en “Por qué se pierden las variables de sesión PHP

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: