Detectando tempo ocioso em PHP

1,137 views
Skip to first unread message

Altamiro Rodrigues

unread,
May 30, 2007, 9:09:08 AM5/30/07
to php-espe...@yahoogrupos.com.br, php...@yahoogrupos.com.br, php...@yahoogrupos.com.br, php-b...@googlegroups.com, php-br...@yahoogroups.com, list...@googlegroups.com

Pessoal,

Estou precisando fazer a seguinte situação.

Tenho um sistema feito em PHP, onde o acesso dele é feito por um Login e Senha, e queria saber se tem como detectar o tempo ocioso do usuário e daí pode desconectar do Sistema sem precisar ele clicar no botão sair e caso ele queria usar o sistema novamente terá que efetuar o login novamente.

Desde de já agradeço pela ajuda.

 

Atenciosamente,

Altamiro Rodrigues
MSN / E-mail: altam...@gmail.com
75 8816 - 9835

juninho grossi

unread,
May 30, 2007, 9:13:14 AM5/30/07
to list...@googlegroups.com
faz isso no php.ini
la vc muda tudo........

Flavinha

unread,
May 30, 2007, 9:18:50 AM5/30/07
to list...@googlegroups.com
Se vc estiver usando sessão, pode setar o tempo de vida da mesma, na qual expirado o tempo, pedirá login novamente.
Se não, outra opção é usar tabelas temporárias no banco, gravando a hora de entrada. se após x tempo não houver um hora de saída, apaga os registros maiores que x tempo do banco. assim pedira login novamente.

On 5/30/07, Altamiro Rodrigues <altam...@gmail.com> wrote:

ramilani12

unread,
May 30, 2007, 9:22:02 AM5/30/07
to list...@googlegroups.com
Define um tempo para sua Session no PHP.ini tem essa session.gc_maxlifetime
Passe um numero em segundos por exemplo 3.600 segundos = 1 hora
--
raphael milani
:=]

Kico Zaninetti

unread,
May 30, 2007, 9:40:14 AM5/30/07
to list...@googlegroups.com
Usar session é bacana, mas a ação de logout só vai acontecer depois que o usuário navegar após o tempo expirado. Uma outra saída para funcionar em paralelo ao timeout da sessão é usar um javascript para redirecionamento para a página de logout após tanto tempo. Use a função setTimeout() que dá certo.

function logout() {
   window.location = 'logout.php';
}
var logOut = window.setTimeout('logout()', 3600000); // tempo em milisegundos 3600000 = 1 hora

--
Kico Zaninetti
carpe diem

Daniel Freire

unread,
May 30, 2007, 9:42:11 AM5/30/07
to list...@googlegroups.com
Cookies tem como setar tempo tb.

Em 30/05/07, Kico Zaninetti <kicoza...@gmail.com> escreveu:



--
==
Daniel C. Freire
ICQ: 57596276
MSN: absynt...@hotmail.com

Optero

unread,
May 30, 2007, 9:53:33 AM5/30/07
to LISTA PHP
Olha vc pode definir um tempo para sessão expirar saca eu fiz isso no
sistema que fiz pra empresa que eu trampo é bem simples.

Alon Daniel Modesto
opt...@gmail.com
11 9421-4282

Altamiro Rodrigues

unread,
May 30, 2007, 9:56:31 AM5/30/07
to list...@googlegroups.com
Quero pegar o tempo ocioso porque ai não irei correr risco de que bem na hora que um usuário esteja fazendo um cadastro o tempo definido no COOKIE ou SESSION_CACHE_EXPIRE, seja finalizado e ai com isso eu iria pede a ação que o usuário estava fazendo no momento. É por isso que estou querendo saber uma forma de pegar o tempo ocioso do usuário porque dai não preciso usar o controle de tempo com COOKIE OU SESSION, com eles uso para fazer outras coisas que não seja controla o tempo de expiração da sessão.

Ob.: Alguém conhece alguma função do PHP que posso usar para ficar fazendo consultar no banco de dados em um determinado tempo definido por mim para checar a hora da ultima ação do usuário.

--

Atenciosamente,

Altamiro Rodrigues
MSN / E-mail: altam...@gmail.com
75 8816 - 9835

Em 30/05/07, Optero <opt...@gmail.com> escreveu:

Aderbal Nunes

unread,
May 30, 2007, 10:30:57 AM5/30/07
to list...@googlegroups.com
cara, tempo de ociosidade no seu caso, vc diz é quando o usuário não está fazendo nada no sistema, tipo não clica em nenhum ítem do menu, não digita em nenhum campo, etc... é meio complicado, se alguém tiver a solução eu também quero saber, pois preciso, mas... eu fiz um javascript que testa a ociosidade do usuário quando ele não utiliza nenhum ítem do form, pode utilizar pra quando o cara não clica em nenhum ítem do menu, mas isso teria que você adaptar para seu sistema, em todos os ítens do menu e em todo formulário, complicado! segue o javascript

ocioso.js

var ocioso = 0;
var runing = true;

function Ociosidade(){
    if( runing ){
        ocioso++; // incrementa ocioso a cada 1seg
        setTimeout("Ociosidade()", 1000);
        if( ocioso == 60  ){ location.replace('./sair.php'); } // 1 minuto
    }
}

function noOcio(){ ocioso = 0; }

no form eu uso:

onClick="noOcio();"

onKeyPress="if( event.keyCode == 13 ){ enviaMsg();  noOcio(); }"

etc...

para você checar algo no banco a cada x segundos, eu recomendo o AJAX

ajax.js

function ajax() {//1
    try {
        return new ActiveXObject(" Microsoft.XMLHTTP");
      } catch(e) {
        try {
          return new ActiveXObject("Msxml2.XMLHTTP");
        } catch(ex) {
          try {
            return new XMLHttpRequest();
          } catch(exc) {
                  alert("Esse browser não tem recursos para uso do Ajax");
            return false;
          }
        }
      }
} //1


verificaAlgo.js

var tempo = 60; // 1 minuto
var cont = 0;
var runing = true;
var ajax1 = new ajax;

function Tempo( idUser ){
   if( runing ){
      cont++;
      setTimeout("Tempo("+idUser+")", 1000);
      if( cont == tempo ){ RealizaSelect( idUser ); }
   }
}

function RealizaSelect( idUser ){
    ajax1.open("POST", "php_que_tem_a_query.php", true);
    ajax1.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
    ajax1.send( "idUser="+idUser );
   
    ajax1.onreadystatechange = function(){
        if(ajax1.readyState == 4){    
            var retorno = ajax1.responseText;
            document.getElementById("seuDiv").innerHTML = retorno ;
        }
    }
}

php_que_tem_a_query.php

faça o php que retorna algo
echo $res["seu_campo_da_tabela"];

e no seu php que vai verificar a cada x segundos vc inclue os .js e poe no <body>

<script src="ajax.js" language="javascript" type="text/javascript"></script>
<script src="verificaAlgo.js" language="javascript" type="text/javascript"></script>

<body onLoad="Tempo(<?php echo $idUser; ?>);" >


digitei esse script aqui, n testei, veja se vc entendeu e tente testar! valeu

____________________________
Aderbal Nunes
Programador
www.zw3.com.br | www.ativaweb.com

Ronaldo Fonseca Junior

unread,
May 30, 2007, 9:22:20 AM5/30/07
to list...@googlegroups.com
Mas e se estiver em um host compartilhado?
Acho que o que ele quer é uma forma de expirar a sessão!
Até hoje eu corro atrás desta informação...

[]´s

juninho grossi escreveu:

No virus found in this incoming message. Checked by AVG Free Edition. Version: 7.5.472 / Virus Database: 269.8.0/821 - Release Date: 27/5/2007 15:05

Ronaldo Fonseca Junior

unread,
May 30, 2007, 10:13:08 AM5/30/07
to list...@googlegroups.com
Optero,

Manda o script para a lista o script que você fez.

[]´s
Ronaldo

Optero escreveu:

Flavinha

unread,
May 30, 2007, 12:59:04 PM5/30/07
to list...@googlegroups.com
Select né amigo...

On 5/30/07, Altamiro Rodrigues <altam...@gmail.com> wrote:

fredBH

unread,
May 31, 2007, 9:59:55 AM5/31/07
to LISTA PHP
Galera... eu achei bastante interessante o função do nosso amigo Kico
A função é esta
---------------------------------------------------------------------------------------------------

function logout() {
window.location = 'logout.php';
}

var logOut = window.setTimeout('logout()', 3600000); // tempo em
milisegundos 3600000 = 1 hora

----------------------------------------------------------------------------------------------------

Isso é muito interessante de se colocar no template html, pois isso
será comum a todas as paginas do site.
Logo, na TAG <BODY> vc colocar chamado no evento ONLOAD... para este
setTimeOut()

ou seja... em todas as paginas... se o cara ficar nessa pagina por
mais de X segundos, voce supoe que o cara deixou a pagina aberta e
esqueceu da vida, e quando o tempo expirar, um script de logout, com
um SESSION_DESTROY() vai ser chamada e matara a SESSAO.

Outra ideia, é para os casos em q o cara clicar no X e fechar a janela
sem executar a funcao de LOGOFF. Para isso, poderia colocar no <BODY>
evento OnUnload
fazer chamar um popup que abre o mesmo script de logout... nao lembro
direito agora.. mas ja usei isso uma vez....

Nao sei se viajei no assunto... mas eh isso ai...
whatever... :P

Até mais...


On 30 maio, 13:59, Flavinha <fjf...@gmail.com> wrote:
> Select né amigo...
>

> On 5/30/07, Altamiro Rodrigues <altamir...@gmail.com> wrote:
>
>
>
> > Quero pegar o tempo ocioso porque ai não irei correr risco de que bem na
> > hora que um usuário esteja fazendo um cadastro o tempo definido no COOKIE ou
> > SESSION_CACHE_EXPIRE, seja finalizado e ai com isso eu iria pede a ação que
> > o usuário estava fazendo no momento. É por isso que estou querendo saber uma
> > forma de pegar o tempo ocioso do usuário porque dai não preciso usar o
> > controle de tempo com COOKIE OU SESSION, com eles uso para fazer outras
> > coisas que não seja controla o tempo de expiração da sessão.
>
> > Ob.: Alguém conhece alguma função do PHP que posso usar para ficar fazendo
> > consultar no banco de dados em um determinado tempo definido por mim para
> > checar a hora da ultima ação do usuário.
>
> > --
>
> > Atenciosamente,
>
> > Altamiro Rodrigues

> > MSN / E-mail: altamir...@gmail.com

Daniel Freire

unread,
May 31, 2007, 10:02:43 AM5/31/07
to list...@googlegroups.com
viajou nao, tem mto sentido mesmo... se for a ideia de templates (master pages), vale sim

Em 31/05/07, fredBH <fre...@gmail.com > escreveu:

Galera... eu achei bastante interessante o função do nosso amigo Kico
A função é esta
---------------------------------------------------------------------------------------------------
function logout() {
   window.location = 'logout.php';
}

var logOut = window.setTimeout ('logout()', 3600000); // tempo em

Kico Zaninetti

unread,
May 31, 2007, 10:06:52 AM5/31/07
to list...@googlegroups.com
Fred, mas de qualquer forma é interessante você colocar o mesmo tempo do javascript para expiração da sessão no servidor, pois se o usuário tem o JavaScript desabilitado, ele não vai funcionar. Expirando a sessão no servidor no tempo X, você já mata o problema. Ele expira se ocioso e pronto. Com o JavaScript vc tira ele da tela que estava aberta e redireciona-o para o logout...
O interessante de tira-lo da tela é que um usuário pode muito bem deixar o sistema aberto numa tela que contém uma planilha de dados financeiros da empresa. Nesse caso o usuário retardado (tem que ser retardado, mas existe usuário assim) vai deixar pelo menos aqueles dados confidenciais visiveis a quem acessar o computador. Então o javascript vai tirá-lo desta tela.

Eu sempre desenvolvo da seguinte maneira: o PHP faz as coisas funcionarem corretamente e o JavaScript faz o aprimoramento da interface com o usuário.


--
Kico Zaninetti
carpe diem

Bruno Gross

unread,
May 31, 2007, 8:09:50 PM5/31/07
to LISTA PHP
Se o cara desabilitar o JS, blau, ja era sua função!

On 30 maio, 10:40, "Kico Zaninetti" <kicozanine...@gmail.com> wrote:
> Usar session é bacana, mas a ação de logout só vai acontecer depois que o
> usuário navegar após o tempo expirado. Uma outra saída para funcionar em
> paralelo ao timeout da sessão é usar um javascript para redirecionamento
> para a página de logout após tanto tempo. Use a função setTimeout() que dá
> certo.
>
> function logout() {
> window.location = 'logout.php';}
>
> var logOut = window.setTimeout('logout()', 3600000); // tempo em
> milisegundos 3600000 = 1 hora
>
> --
> Kico Zaninetti
> carpe diem
>

> On 5/30/07, ramilani12 <ramil...@gmail.com> wrote:
>
>
>
> > Define um tempo para sua Session no PHP.ini tem essa s
> > ession.gc_maxlifetime
> > Passe um numero em segundos por exemplo 3.600 segundos = 1 hora
>

> > On 5/30/07, juninho grossi <juninh...@gmail.com> wrote:
>
> > > faz isso no php.ini
> > > la vc muda tudo........
>

> > > On 5/30/07, Altamiro Rodrigues < altamir...@gmail.com> wrote:
>
> > > > Pessoal,
>
> > > > Estou precisando fazer a seguinte situação.
>
> > > > Tenho um sistema feito em PHP, onde o acesso dele é feito por um Login
> > > > e Senha, e queria saber se tem como detectar o tempo ocioso do usuário e daí
> > > > pode desconectar do Sistema sem precisar ele clicar no botão sair e caso ele
> > > > queria usar o sistema novamente terá que efetuar o login novamente.
>
> > > > Desde de já agradeço pela ajuda.
>
> > > > Atenciosamente,
>
> > > > Altamiro Rodrigues

> > > > MSN / E-mail: altamir...@gmail.com

Kico Zaninetti

unread,
Jun 1, 2007, 1:17:57 PM6/1/07
to list...@googlegroups.com
Leia meu último comentário deste post em que eu explico como utilizar isso corretamente.


--
Kico Zaninetti
carpe diem


Reply all
Reply to author
Forward
0 new messages