Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Sesión PHP se pierde/borra en media hora

Estas en el tema de Sesión PHP se pierde/borra en media hora en el foro de PHP en Foros del Web. Hola, compañeros! CONTEXTO. Estoy trabajando en un proyecto PHP (crudo, sin frameworks) en el que hago uso de sesiones Este proyecto se compone de 2 ...
  #1 (permalink)  
Antiguo 12/04/2019, 16:51
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 553
Antigüedad: 6 años, 9 meses
Puntos: 21
Pregunta Sesión PHP se pierde/borra en media hora

Hola, compañeros!

CONTEXTO.
  1. Estoy trabajando en un proyecto PHP (crudo, sin frameworks) en el que hago uso de sesiones
  2. Este proyecto se compone de 2 archivos: un index.php y un process.php. El 1ero es aquel que contiene el HTML, y el 2do es el encargado de contener todas las funcionalidades PHP que se llaman al ejecutar AJAX. Eso es todo, no hay nada más. Como se ve, nunca cambio de página, todo se visualiza dentro del index.php.
  3. El proyecto está hosteado en el plan más económico de hosting compartido de Godaddy

PROBLEMA. Me logueo correctamente a index.php, con lo cual se crea esta variable de sesión: $_SESSION['usuario_id'] = 5; (donde 5 es el ID del usuario actual). El problema radica en que si después de una media hora (aprox) de no hacer nada dentro del sistema, me animo a hacer algo, por ejemplo una petición a la base de datos, el sistema me indica que ya no existe la variable de sesión que se creó inicialmente al loguearme:

Código PHP:
if (isset($_SESSION['usuario_id'])) {
    
// Hago una consulta a la BD
}
else {
    echo 
'La sesión ha expirado.'// El sistema me muestra este mensaje después de media hora de inactividad

¿QUÉ ESTOY HACIENDO PARA SOLUCIONAR EL PROBLEMA?
Estoy haciendo 2 cosas:

1) Puse un .htaccess en la carpeta raíz del proyecto, que contiene esto:
Código htaccess:
Ver original
  1. php_value session.cache_expire 600
  2. php_value session.gc_maxlifetime 36000
  3. php_value session.cookie_lifetime 36000
Como se ve en esta captura, los ajustes sí surten efecto.


2) Por si acaso, y a modo de refuerzo, pongo lo siguiente al principio del index.php y del process.php
Código PHP:
ini_set('session.cache_expire'600);
ini_set('session.gc_maxlifetime'36000);
ini_set('session.cookie_lifetime',36000);
header('Content-Type: text/html; charset=UTF-8');
header('Expires: Sat, 29 Jun 2019 00:00:00 GMT'); // Aquí estoy poniendo una fecha 2 meses después del día de hoy
session_cache_expire(600);
session_set_cookie_params(36000);
session_start(); 
RESULTADO Nada funciona, todo sigue igual: si después de media hora de inactividad intento utilizar el sistema, éste me dice que no existe $_SESSION['usuario_id'].

PREGUNTAS
  1. ¿Qué cosa está haciendo que mi variable de sesión se pierda/borre?
  2. ¿Qué debo hacer para solucionar este problema?

Saludos!

Última edición por berkeleyPunk; 12/04/2019 a las 17:28
  #2 (permalink)  
Antiguo 12/04/2019, 20:24
 
Fecha de Ingreso: abril-2006
Mensajes: 317
Antigüedad: 13 años, 6 meses
Puntos: 61
Respuesta: Sesión PHP se pierde/borra en media hora

Cita:
Iniciado por berkeleyPunk Ver Mensaje
Hola, compañeros!

CONTEXTO.
  1. Estoy trabajando en un proyecto PHP (crudo, sin frameworks) en el que hago uso de sesiones
  2. Este proyecto se compone de 2 archivos: un index.php y un process.php. El 1ero es aquel que contiene el HTML, y el 2do es el encargado de contener todas las funcionalidades PHP que se llaman al ejecutar AJAX. Eso es todo, no hay nada más. Como se ve, nunca cambio de página, todo se visualiza dentro del index.php.
  3. El proyecto está hosteado en el plan más económico de hosting compartido de Godaddy

PROBLEMA. Me logueo correctamente a index.php, con lo cual se crea esta variable de sesión: $_SESSION['usuario_id'] = 5; (donde 5 es el ID del usuario actual). El problema radica en que si después de una media hora (aprox) de no hacer nada dentro del sistema, me animo a hacer algo, por ejemplo una petición a la base de datos, el sistema me indica que ya no existe la variable de sesión que se creó inicialmente al loguearme:

Código PHP:
if (isset($_SESSION['usuario_id'])) {
    
// Hago una consulta a la BD
}
else {
    echo 
'La sesión ha expirado.'// El sistema me muestra este mensaje después de media hora de inactividad

¿QUÉ ESTOY HACIENDO PARA SOLUCIONAR EL PROBLEMA?
Estoy haciendo 2 cosas:

1) Puse un .htaccess en la carpeta raíz del proyecto, que contiene esto:
Código htaccess:
Ver original
  1. php_value session.cache_expire 600
  2. php_value session.gc_maxlifetime 36000
  3. php_value session.cookie_lifetime 36000
Como se ve en esta captura, los ajustes sí surten efecto.


2) Por si acaso, y a modo de refuerzo, pongo lo siguiente al principio del index.php y del process.php
Código PHP:
ini_set('session.cache_expire'600);
ini_set('session.gc_maxlifetime'36000);
ini_set('session.cookie_lifetime',36000);
header('Content-Type: text/html; charset=UTF-8');
header('Expires: Sat, 29 Jun 2019 00:00:00 GMT'); // Aquí estoy poniendo una fecha 2 meses después del día de hoy
session_cache_expire(600);
session_set_cookie_params(36000);
session_start(); 
RESULTADO Nada funciona, todo sigue igual: si después de media hora de inactividad intento utilizar el sistema, éste me dice que no existe $_SESSION['usuario_id'].

PREGUNTAS
  1. ¿Qué cosa está haciendo que mi variable de sesión se pierda/borre?
  2. ¿Qué debo hacer para solucionar este problema?

Saludos!
a la final la session de PHP no es nada mas que una COOKIE con ID unico, fijate con el DEBUGGER del navegador y mira la cookie de la session y deberia estar ahi el TIEMPO de expiracion, y fijate que esten correctamente osea si le pusiste en el htaccess 3600 segundos, por logico la COOKIE de session creada deberia vencer en 1 hora
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #3 (permalink)  
Antiguo 13/04/2019, 12:48
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 553
Antigüedad: 6 años, 9 meses
Puntos: 21
Pregunta Respuesta: Sesión PHP se pierde/borra en media hora

Cita:
Iniciado por tuadmin Ver Mensaje
a la final la session de PHP no es nada mas que una COOKIE con ID unico, fijate con el DEBUGGER del navegador y mira la cookie de la session y deberia estar ahi el TIEMPO de expiracion, y fijate que esten correctamente osea si le pusiste en el htaccess 3600 segundos, por logico la COOKIE de session creada deberia vencer en 1 hora
Gracias por responder, tuadmin. Supongo que con debugger te refieres a la consola del inspeccionador de elementos del navegador (en mi caso: Chrome). Si esto es así, entiendo que los navegadores no devuelven la fechad e expiración de las cookies. Hice la prueba, y la consola de Chrome sólo me devuelve el nombre de la cookie y su valor, nada más.

Así que para asegurarme de la fecha de expiración, busqué la cookie dentro de la la sección Ver todas las cookies dentro de la configuración de Chrome, y la encontré, y como verás en esta captura de pantalla, la cookie de sesión debería expirar sólo hasta que se cierre el navegador. ¡Pero esto no ocurre! ¿Por qué?
  #4 (permalink)  
Antiguo 13/04/2019, 17:45
 
Fecha de Ingreso: abril-2006
Mensajes: 317
Antigüedad: 13 años, 6 meses
Puntos: 61
Respuesta: Sesión PHP se pierde/borra en media hora

mmm prueba algo sencillo, crea 2 scripts, 1 el cual crea la session php, ponle un valor RANDOM
2 els egundo archivo php que recupere el varlo y lo uestre en pantalla y que tambien le agregue otro valor random, y haz la prueba, de si la session expira en media hora, podria cosa de alguna extension o algo similar , por que las sessiones y su expiracion dependen del navegador, si no encuentras ese error con esos 2 scripts limpios, entonces tendras que revisar tu proyecto podria ser que en alguna parte estes elimando la session o cambiando los atributos de la cookie de session
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #5 (permalink)  
Antiguo 20/04/2019, 15:29
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 553
Antigüedad: 6 años, 9 meses
Puntos: 21
Pregunta Respuesta: Sesión PHP se pierde/borra en media hora

Me respondo a mí mismo.

Claramente no podía dejar este tema sin solución por mucho tiempo, ya que el proyecto es laboral y urgía respuesta.

Al final no pude lograr que las variables de sesión duraran más de 24 minutos, ni armando el .htaccess, ni armando un php.ini en la raíz del proyecto, ni poniendo cabeceras en los PHP que modificaran la configuración de la duración del tiempo de vida de la sesión..., nada funcionó.

Puesto que hay librerías para todo, busqué y encontré varias. La primera que probé fue la de Josantonius, y el resultado fue el mismo, las sesiones seguían durando 24 minutos.

Solución. Hasta que me encontré con la librería Zebra Session, que resultó funcionar perfectamente. Funciona porque los datos de la sesión ya no se guardan en cookies, sino en una base de datos MySQL. Y el uso de esta librería es increíblemente sencillo: sólo se instancia un objeto de su clase y se acabó, las variables de sesión se usan tal como se usan normalmente.

Etiquetas: sesiones_en_php
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 20:37.