Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/04/2019, 15:51
Avatar de berkeleyPunk
berkeleyPunk
 
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
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 16:28