JavaScript - contar el tiempo que un usuario esta inactivo en el sistema

   
Vista:

contar el tiempo que un usuario esta inactivo en el sistema

Publicado por javier (1 intervención) el 14/01/2015 23:54:00
Hola que tal gente, recurro a ustedes porque soy bastante novato en esto de JS, estoy trabajando con un sistema que utiliza un archivo JS para contar el tiempo que un usuario esta inactivo en el sistema, se supone que al pasar cierto tiempo inactivo en el sistema debe de mostrarte en pantalla que tu tiempo en el sistema esta por acabar y si deseas seguir conectado, el archivo que uso no funciona totalmente puesto que no me muestra en pantalla el mensaje que les decia anteriormente, solo me redirecciona a la pagina que yo le indico, cabe aclarar que el sistema que estoy programando esta basado en php con code igniter, no se si este problema sea del archivo en si o probablemente algo me falte de declarar en php.

les anexo el codigo del archivo, de hecho este archivo no lo hice yo, lo descargue de internet y probablemente a alguno de aqui pueda que se le haga conocido, espero y pueda ayudarme.

saludos.

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//######
//## This work is licensed under the Creative Commons Attribution-Share Alike 3.0 
//## United States License. To view a copy of this license, 
//## visit http://creativecommons.org/licenses/by-sa/3.0/us/ or send a letter 
//## to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
//######
 
(function($){
 $.fn.idleTimeout = function(options) {
    var defaults = {
      inactivity: 1200000, //20 Minutes
      noconfirm: 10000, //10 Seconds
      sessionAlive: 30000, //10 Minutes
      redirect_url: '/auth/acceder/',
      click_reset: true,
      alive_url: '/js_sandbox/',
      logout_url: '/auth/acceder/',
      showDialog: true,
			dialogTitle: 'TU SESION ESTA A PUNTO DE CADUCAR',
			dialogText: 'Por Seguridad el sistema esta a punto de Cerrar tu Sesión ¿Deseas seguir Conectado?.',
			dialogButton: 'Seguir Conectado'
    }
 
    //##############################
    //## Private Variables
    //##############################
    var opts = $.extend(defaults, options);
    var liveTimeout, confTimeout, sessionTimeout;
    var modal = "<div id='modal_pop'><p>"+opts.dialogText+"</p></div>";
 
    //##############################
    //## Private Functions
    //##############################
    var start_liveTimeout = function()
    {
      clearTimeout(liveTimeout);
      clearTimeout(confTimeout);
      liveTimeout = setTimeout(logout, opts.inactivity);
 
      if(opts.sessionAlive)
      {
        clearTimeout(sessionTimeout);
        sessionTimeout = setTimeout(keep_session, opts.sessionAlive);
      }
    }
 
    var logout = function()
    {
      var my_dialog;
	  var buttonsOpts = {};
 
      confTimeout = setTimeout(redirect, opts.noconfirm);
 
	  buttonsOpts[opts.dialogButton] = function(){
		my_dialog.dialog('close');
		stay_logged_in();
	  }
 
      if(opts.showDialog)
      {
        my_dialog = $(modal).dialog({
          buttons: buttonsOpts,
          modal: true,
          title: opts.dialogTitle
        });
      }
    }
 
    var redirect = function()
    {
      if(opts.logout_url)
      {
        $.get(opts.logout_url);
      }
      window.location.href = opts.redirect_url;
    }
 
    var stay_logged_in = function(el)
    {
      start_liveTimeout();
      if(opts.alive_url)
      {
        $.get(opts.alive_url);
      }
    }
 
    var keep_session = function()
    {
      $.get(opts.alive_url);
      clearTimeout(sessionTimeout);
      sessionTimeout = setTimeout(keep_session, opts.sessionAlive);
    }
 
    //###############################
    //Build & Return the instance of the item as a plugin
    // This is basically your construct.
    //###############################
    return this.each(function() {
      obj = $(this);
      start_liveTimeout();
      if(opts.click_reset)
      {
        $(document).bind('click', start_liveTimeout);
      }
      if(opts.sessionAlive)
      {
        keep_session();
      }
    });
 
 };
})(jQuery);
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 txema

contar el tiempo que un usuario esta inactivo en el sistema

Publicado por txema (16 intervenciones) el 19/01/2015 22:17:52
Hola javier:

No respondía a tu tema ya que lo tienes en javascript y, como dices, es lo que yo denomino un programa "enlatado". Y si no los trituro hasta entenderlos y modificarlos a mi gusto (vamos, hacer de un coche un avión), no los utilizo.

Te muestro lo que yo hago, pero en PHP.
Ya que si estamos trabajando con usuarios conectados, lo están sobre base de datos, ... En fin, en el servidor, por lo que me parece que es el lenguaje directo.

Al loguearse el usuario, con los elementos de sesión le incluyo $_SESSION["ultimoAcceso"] cuyo valor es el momento en el que acceden ($ahora).

En la cabecera de las páginas, junto al session_start(); (seguimiento de sesión) incluyo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
if(isset($_SESSION["conectado"])){
$fechaGuardada = $_SESSION["ultimoAcceso"];
$ahora = date("Y-n-j H:i:s");
if($_SESSION["conectado"]!=true){
echo '<script>window.location="reconectar.php"</script>';
return false;
}else{
$tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));
if($tiempo_transcurrido >= 3600){ // 1 x 60 x 60 = 1 horas...
session_destroy();
echo '<script>window.location="reconectar.php"</script>'; // 
return false;
}else{$_SESSION["ultimoAcceso"] = $ahora;}
}
}else{
return false;
}
?>

Creo que sobran los comentarios.
Cada vez que realiza alguna acción, el código le renueva el tiempo ($_SESSION["ultimoAcceso"] = $ahora).
Si el tiempo transcurrido ha sobrepasado, le envío a la página reconectar.php

En realidad no me preocupo de enviarle un mensaje previo de que se le acaba el tiempo ya que, posiblemente esté en otra cosa (tomando un café o se fue sin cerrar la página).

La página reconectar.php es apenas un miniformulario de acceso con los mínimos datos para conectarse nuevamente e incluso derivarle directamente a la página en la que estaba anteriormente.

Creo que por extensión de código es mucho más simple
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

contar el tiempo que un usuario esta inactivo en el sistema

Publicado por Alberto Rojas (1 intervención) el 26/11/2016 00:49:20
Hola txema.
He implementado lo que explicas pero solo funciona cuando se recarga la pagina o se cambia de una pagina a otra...
En caso de que se tenga una pagina con dashboard en donde las secciones las este cambiando un javascript, tu solución no funciona porque la pagina nunca se recarga. He estado buscando pero no encuentro la solución.
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