> Faqs > Ayuda para mantener Sesión Activa PHP

Ayuda para mantener Sesión Activa PHP

Buenas tardes estimad@s, su gentil ayuda. Mantengo un codigo el cual me permite ingresar sin problemas al sistema y me mantiene activa la sesión por un tiempo, el problema es cuando dejamos de estar frente al computador o dispositivo móvil y se cierra la sesión y perdemos el trabajo realizado, entonces necesito poder mantener activa la sesión por un lapso de 12 horas como minimo, este es el codigo que mantengo para session.php

<?php
 session_start();

class Session {

 public $msg;
 private $user_is_logged_in = false;

 function __construct(){
   $this->flash_msg();
   $this->userLoginSetup();
 }

  public function isUserLoggedIn(){
    return $this->user_is_logged_in;
  }
  public function login($user_id){
    $_SESSION['user_id'] = $user_id;
  }
  private function userLoginSetup()
  {
    if(isset($_SESSION['user_id']))
    {
      $this->user_is_logged_in = true;
    } else {
      $this->user_is_logged_in = false;
    }

  }
  public function logout(){
    unset($_SESSION['user_id']);
  }

  public function msg($type ='', $msg =''){
    if(!empty($msg)){
       if(strlen(trim($type)) == 1){
         $type = str_replace( array('d', 'i', 'w','s'), array('danger', 'info', 'warning','success'), $type );
       }
       $_SESSION['msg'][$type] = $msg;
    } else {
      return $this->msg;
    }
  }

  private function flash_msg(){

    if(isset($_SESSION['msg'])) {
      $this->msg = $_SESSION['msg'];
      unset($_SESSION['msg']);
    } else {
      $this->msg;
    }
  }
}

$session = new Session();
$msg = $session->msg();

?>

Y en el .htaccess

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php74” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-ea-php74 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit

# BEGIN cPanel-generated php ini directives, do not edit
# Manual editing of this file may result in unexpected behavior.
# To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
# For more information, read our documentation (https://go.cpanel.net/EA4ModifyINI)
<IfModule php7_module>
   php_flag display_errors On
   php_value max_execution_time 30
   php_value max_input_time 60
   php_value max_input_vars 1000
   php_value memory_limit 32M
   php_value post_max_size 8M
   php_value session.cookie_lifetime 14400
   php_value session.gc_maxlifetime 14400
   php_value session.save_path "/var/cpanel/php/sessions/ea-php74"
   php_value upload_max_filesize 2M
   php_flag zlib.output_compression Off
</IfModule>
<IfModule lsapi_module>
   php_flag display_errors On
   php_value max_execution_time 30
   php_value max_input_time 60
   php_value max_input_vars 1000
   php_value memory_limit 32M
   php_value post_max_size 8M
   php_value session.cookie_lifetime 14400
   php_value session.gc_maxlifetime 14400
   php_value session.save_path "/var/cpanel/php/sessions/ea-php74"
   php_value upload_max_filesize 2M
   php_flag zlib.output_compression Off
</IfModule>
# END cPanel-generated php ini directives, do not edit

Respuestas

A veces para mantener la sesión activa lo que se puede hacer es una solicitud periódica al servidor, de modo que se refresque la página constantemente y se refresque por tanto la sesión.

Esto lo puedes hacer con Javascript, con una función que llamas con setTimeout durante la inicialización de la página.

setTimeout( function() {
    window.location = 'http://example.com/tu_pagina?aleatorio=xxxx';
}, 60 * 20)

En este ejemplo puedes ver cómo se llama a la página que se desea, pasados 20 minutos (20*60 segundos). Si la página es la misma y quieres evitar que entre en juego la caché le puedes pasar un dato por parámetro, que podría ser aleatorio, para que vaya cambiando.

No es que me guste mucho esta opción, pero es una posibilidad que puedes probar.

Marcos
172 2 15 11
Hace un tiempo me encontré con este problema e implementé una solución basada en una idea muy similar. Aquí puedes ver el detalle por si te ayuda https://academy.leewayweb.com/como-evitar-la-expiracion-de-las-sesiones-en-php/

Diría que lo consigues simplemente cambiando los valores siguientes:

php_value session.cookie_lifetime 14400
php_value session.gc_maxlifetime 14400

php_value session.cookie_lifetime si lo dejas en el valor 0 consigues que la cookie de sesión esté activa hasta que se cierre el navegador.

php_value session.gc_maxlifetime define el tiempo que duran los datos antes de considerarlos basura y ser potencialmente limpiados.

En la documentación de PHP encuentras todos los detalles de configuración de la sesión, por si alguno más lo tienes mal: Configuración de sesión

Además, si no se puede acceder al PHP.ini tienes una función en el API que te permite modificar el tiempo de la cookie de sesión, entre otras cosas: session_set_cookie_params.

Dinos qué tal te ha ido.

Julian
1147 49 87 46