session lifetime callback

52 views
Skip to first unread message

Douglas J.A.M

unread,
Jul 4, 2012, 8:32:00 PM7/4/12
to kohan...@googlegroups.com
Alguém aí sabe alguma maneira fácil de implementar isso? Onde quando o lifetime da sessão expirar, e ela for destruida, exibir uma mensagem para o usuário quando ele atualizar a página informando que por inatividade foi deslogado, sei que existem maneiras, mas as que conheço são meio complicadas de se implementar, como o intercambio de cookie + session, ou session + db...

felipe bastos

unread,
Jul 4, 2012, 8:45:19 PM7/4/12
to kohan...@googlegroups.com

Pow cara .. nunca me liguei nisso ..

Eu simplesmente verifico o usuario no banco e salvo a sessao.

Depois, simplesmente confiro que a sessao existe.

Se a sessao nao existir mais, redireciono pra pagina de login e informo que a sessao expirou por inatividade.

Tem a funcao de login e a de logado.

Esta tao transparente .. q nem sei o que rola por tras :)

code.google.com/p/phpscrum/source/trunk/application/controller/auth.php

Acho que o link é esse ... o codigo ta super simples.

Em 04/07/2012 21:32, "Douglas J.A.M" <dougl...@gmail.com> escreveu:
Alguém aí sabe alguma maneira fácil de implementar isso? Onde quando o lifetime da sessão expirar, e ela for destruida, exibir uma mensagem para o usuário quando ele atualizar a página informando que por inatividade foi deslogado, sei que existem maneiras, mas as que conheço são meio complicadas de se implementar, como o intercambio de cookie + session, ou session + db...

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/kohana-php?hl=pt-BR.

Douglas J.A.M

unread,
Jul 4, 2012, 9:22:54 PM7/4/12
to kohan...@googlegroups.com
Pois é, seu código faz o mesmo que o meu  http://pastebin.com/miyG66XR  porém não faz ainda o que quero sao 4 itens:

- se o cara acessa de login e não tem sessão blz, não exibo nada ele vai logar
- se o cara acessa o login e tem sessao, redireciono ao index
- se o cara cara acessa logout, deslogo ele e exibo mensagem
- [AGORA O X DA QUESTAO] o cara está navegando, vai ao banheiro, a sessão tem seu lifetime expirado, meu controller template ve meu acesso a uma página restrita sem sessão, redireciona para login, eu até poderia adicionar uma mensagem aqui na sessão para exibir, porém e se o cara estiver acessando atraves de um favorito e não tiver sido desconectado por timeout, vou exibir a mensagem indevidamentel, quero saber se voces tem alguma maneira + facil de fazer isso sem a gambis que falei no 1 post

entendeu?

Douglas J.A.M

unread,
Jul 4, 2012, 9:25:33 PM7/4/12
to kohan...@googlegroups.com
ai o ideal seria um callback no timeout do lifetime, mas pelo que estudei por a sessao ser nativa do php, apache e afins é dificil fazer, entao o mais certo seria a pog, ai queria ver se vcs tem alguma idéia

Marcus Sa

unread,
Jul 4, 2012, 10:38:39 PM7/4/12
to kohan...@googlegroups.com
Talvez essa implementação no client possa ti ajudar.

Juarez Junior

unread,
Jul 5, 2012, 9:46:18 AM7/5/12
to kohan...@googlegroups.com

Douglas J.A.M

unread,
Jul 6, 2012, 10:39:34 AM7/6/12
to kohan...@googlegroups.com
Vlw galera fiz uma solução legalzinha, obrigado a todos


 protected function expirou() {
        if (Session::instance()->get('usuario') == NULL) {
            Helper_NOTIFICACAO::addNotificacao('info', 'Sua sessão expirou por inatividade!');
            $retorno = true;
        } else {
            $retorno = false;
        }

        $jsonEncoded = json_encode($retorno);
        $this->request->headers('Content-type', 'application/json; charset=' . Kohana::$charset);
        $this->response->body($jsonEncoded);
    }

//js on reayd
setInterval(function(){expirouSessao()}, 60000);

// funcao js

function expirouSessao() {

    var retorno = false;
    $.ajax({
        type: "POST",
        url: '/ajax.php?action=expirou',
        data: {},
        dataType: "json",
        success: function(data) {
            if(data){
                retorno = true;
            }
        },
        complete: function(){
            if(!retorno){
                console.log('não expirou...')
            } else {
                console.log('expirou...')
            }
        }
    });
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.

Para obter mais opções, visite esse grupo em http://groups.google.com/group/kohana-php?hl=pt-BR.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+unsubscribe@googlegroups.com.

Douglas J.A.M

unread,
Jul 6, 2012, 10:47:09 AM7/6/12
to kohan...@googlegroups.com
Removendo os testes...:

 complete: function(){
            if(retorno){
                document.location.href = '/';

Waldson Patricio

unread,
Jul 6, 2012, 10:47:39 AM7/6/12
to kohan...@googlegroups.com
Se o tempo da sessão for maior que 60000 sua sessão nunca irá expirar (Session::instance() renova a sessão).
Seu tempo tem que ser maior que o lifetime da sessão e você também precisa saber se o cara estava logado antes
(se eu acessar diretamente vai redirecionar e mostrar a mensagem que eu estava logado)


2012/7/6 Douglas J.A.M <dougl...@gmail.com>
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/kohana-php/-/1YZm5DRRONYJ.

Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+...@googlegroups.com.

felipe bastos

unread,
Jul 6, 2012, 11:37:17 AM7/6/12
to kohan...@googlegroups.com

Opa ..

Eu tenho um Controller_Restrito_Template que verifica se esta logado .. ai nas partes restritas .. basta extender.

Eu faria um ajax semelhante, mas verificaria a ultima pagina acessada .. ou uma especifica para "contar" usuarios online. Isso nos controllers restritos ja que todos os meus sistemas sao de acesso restrito.

Douglas J.A.M

unread,
Jul 6, 2012, 12:49:49 PM7/6/12
to kohan...@googlegroups.com
Aqui funciona perfeitamente, não expus todos os detalhes obviamente, no meu controller template tenho um código que verifica se ta logado, se sim regenerate, se não redireciona para login informando que não tem acesso impossibilitando o acesso direto. Este 60000 no js é para fazer a pesquisa se a sessão expirou de 1 em 1 minuto, não tem relação com o tempo da sessão, o tempo da mesma é definido num config, e é regenerado a cada movimentação de página.
Reply all
Reply to author
Forward
0 new messages