Rogério Lino

Web development and tips

Session Keep Alive

Uma maneira fácil de manter a sessão ativa no lado do servidor sem sobrecarregá-lo com longos tempos de timeout, é usar um script que redireciona o usuário para a tela de login após um determinado período de inatividade (teclado e mouse ociosos), e fazer requisições assíncronas ao servidor para manter a sessão ativa durante a atividade.

Resumindo, enquanto usuário está utilizando a aplicação (digitando ou movendo o cursor) uma requisição assíncrona é disparada a cada X minutos (ping), e quando o usuário ficar ocioso começa a contar o tempo para redirecioná-lo para a tela de login. É importante que esse tempo para redirecionar para o login seja menor do que o timeout do servidor.

Para implementar essa ideia, vou utilizar um plugin jQuery que monitora a atividade do usuário (teclado e mouse): https://github.com/rogeriolino/jquery-idletimer.

Abaixo o trecho javascript para disparar o ping e fazer o logout após 10 minutos de ociosidade.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// session keep alive
;(function($) {
    "use strict";

    var pingTime = 60; // ping a cada 60 segundos
    var count = pingTime;
    $.idleTimer({
        time: 10 * 60, // 10 minutos para timeout
        start: function() {
            count = pingTime;
        },
        change: function(it) {
            count--;
            console.log(count);
            if (count <= 0) {
                count = pingTime;
                $.ajax({ url: '/ping.php' });
            }
        },
        end: function() {
            window.location.href = '/logout.php';
        }
    });
})(jQuery);

Arquivo PHP para receber as requisições e abrir a sessão mantendo-a ativa:

1
2
3
<?php

session_start();

Comments