Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/04/2019, 19:24
tuadmin
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
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.com/pools/c/8lmNLmWnG9