PHP - Ayuda para mantener Sesión Activa PHP

 
Vista:
Imágen de perfil de Pablo J.
Val: 29
Ha aumentado su posición en 213 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda para mantener Sesión Activa PHP

Publicado por Pablo J. (29 intervenciones) el 23/06/2021 00:03:40
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Ayuda para mantener Sesión Activa PHP

Publicado por joel (1269 intervenciones) el 23/06/2021 08:34:08
Hola Pablo, eso es un problema con el que nos encontramos muchos usuarios y la solución es sencilla... Por defecto, las variables de sesión duran 30 minutos, por lo que puedes hacer un ajax que cada 10 minutos haga una peticion a una pagina web para activar la sesión, así no se terminara nunca.

Nosotros lo hacemos así:
1
setInterval(() => ajax.post("/se.php", {}), 600000);

NOTA: te he puesto ajax, porque no se si utilizas jquery o cualquier otro framework...

y el archivo se.php solo, tiene que tener:
1
2
<?php
session_start();

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo J.
Val: 29
Ha aumentado su posición en 213 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda para mantener Sesión Activa PHP

Publicado por Pablo J. (29 intervenciones) el 23/06/2021 18:00:32
Estimado, te comento que no me funciono, deje trabajando el sistema por 1:30 y no se cerro la sesión de igual manera, revise en google la actividad de la web y no me mostró ningún tipo de servicio en ejecución del script, también probémoslos con este otro y lo mismo
1
2
3
4
5
6
7
8
9
10
<script>
    document.addEventListener("DOMContentLoaded", function(){
        // Invocamos cada 5 segundos ;)
        const milisegundos = 5 *1000;
        setInterval(function(){
            // No esperamos la respuesta de la petición porque no nos importa
            fetch("./refrescar.php");
        },milisegundos);
    });
</script>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo J.
Val: 29
Ha aumentado su posición en 213 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda para mantener Sesión Activa PHP

Publicado por Pablo J. (29 intervenciones) el 29/06/2021 03:47:55
Hola buenas tardes, muchas gracias este logra su objetivo de mantener la session activa siempre y cuando este navegando o haciendo algo en el dispositivo, pero si no estoy frente al dispositivo no funciona de igual forma cierra la session en x cantidad de tiempo, por ahora voy apañado con esto hasta poder solucionar que sea definitivo, he mirado una opción de que cuando un usuario se logue este determine el tiempo que quiero mantener activa la session pero no se como implementar
1
session_set_cookie_params(60*60*24*14);
en este codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?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();
 
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda para mantener Sesión Activa PHP

Publicado por Mauro (1036 intervenciones) el 29/06/2021 17:05:49
El tema de mantener la sesión activa por poco tiempo es un simple mecanismo de seguridad... no creo que sea conveniente dejar que el usuario lo determine.

En última instancia, si alguien se logea, navega un poco y luego se va por dos horas... ¿por qué querría tener su sesión abierta al volver? Tal vez tendría sentido si la sesión queda asociada a algún dispositivo en particular o algo así... pero es un contexto muy particular donde puedes estar seguro de que ninguna otra persona se sentará al teclado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo J.
Val: 29
Ha aumentado su posición en 213 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda para mantener Sesión Activa PHP

Publicado por Pablo J. (29 intervenciones) el 29/06/2021 17:51:10
Somos Bomberos Voluntarios y manteemos ingresando reportes de accidentes y trabajos diarios y cuando nos llaman a una emergencia dejamos nuestro trabajo empezado y muchas de las veces nos ausentamos por horas y al regresar a la estación hemos perdido todo lo que teníamos ingresado y es muy tedioso volver a escribir todo y si nos vuelven a llamar toca acudir y así perdemos tiempo en estar llenando hasta 5 veces al día el mismo informe, por eso es que necesitamos poder mantener una session activa por lo mínimo 12 horas.
Disculpen si les he molestado buscando una solución para esto, pero como comprenderán esa es la situación.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda para mantener Sesión Activa PHP

Publicado por Mauro (1036 intervenciones) el 30/06/2021 16:59:39
Ah... ya veo. Gracias por el detalle, ahora que lo pones en contexto es más fácil ayudarte :)

Probablemente sería bueno buscar alguna otra solución, por ejemplo, hacer guardados parciales. Por ejemplo, podrías implementar un mecanismo que, vía ajax, vaya guardando cada cosa que se ingresa en lugar de esperar a que el formulario esté completo para guardarlo.

De esa forma no dependerías del tiempo de vida de la sesión.

¿Podría servirte algo así?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo J.
Val: 29
Ha aumentado su posición en 213 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda para mantener Sesión Activa PHP

Publicado por Pablo J. (29 intervenciones) el 01/07/2021 16:35:38
Gracias por responder, si lo estuve pensando pero no creo que sea una solución ya que no solo ingresamos reportes, sino que también hacemos varias cosas en el sistema como lo es inventario, manejo de calendario, informes, salida de unidades contra incendio, entonces no siempre estamos en una sola pagina sino que tenemos varias abiertas al mismo tiempo, así que lo estuvimos pensando y la mejor opción es poder mantener la session abierta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda para mantener Sesión Activa PHP

Publicado por Mauro (1036 intervenciones) el 02/07/2021 14:53:29
De acuerdo. En ese caso imagino que lo mejor que puedes hacer manejarte con los valores de cookie life time y eso.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar