Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ar0n

Expirar sessao caso usuário fique determinado tempo ócio

Recommended Posts

Estou tetando fazer com que a sessão do sistema expire caso o usuário fique muito tempo sem acessar algum recurso do sistema. Só que estou tendo alguns problemas todos os exemplos que pensou ou que encontro só fazem o tempo ficar estático, logo não importa se o usuário fazer alguma coisa ou não ele sera "retirado" do sistema.

 

Tem um exemplo aqui mesmo do fórum:

 

Esse daqui daqui do fórum mesmo: http://forum.imasters.com.br/topic/237480-expirar-tempo-de-um-sesso/

 

O cara deixou ate no final um código pronto, mas acho que não estou aplicando ele da maneira correta.

 

Será que alguém poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhorei o código que você passou no link, e fiz um exemplo com 60 segundos

Se quiser mais é só ir multiplicando... + 60 * 2 = 120 segundos hehehe básico

 

No seu login você seta a sessão abaixo.

$_SESSION["sessiontime"] = time() + 60;

 

depois e só chamar este código abaixo dentro de um arquivo de segurança em todas as páginas restritas.

<?php
session_start(); 
if ( isset( $_SESSION["sessiontime"] ) ) { 
	if ($_SESSION["sessiontime"] < time() ) { 
		session_unset();
		echo "Seu tempo Expirou!";
		//Redireciona para login
	} else {
		echo 'Logado ainda!';
		//Seta mais tempo 60 segundos
		$_SESSION["sessiontime"] = time() + 60;
	}
} else { 
	session_unset();
	//Redireciona para login
}

Dúvida poste ae!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa WDuarte muito obrigado cara, você ajudou bastante cara :yes: . Mas antes de fechar o tópico gostaria de tirar umas dúvidas finais.

Agora estou com uma dúvida para que serve o

@session_start();


O código aqui só funcionou usando ele. Pelo que entendi acredito que ele repasse a sessão para outros arquivos (como se fosse uma ponte) é isso mesmo?

E uma outra dúvida a diferença entre o session_unset(); e o session_destroy();

Também tenho uma "teoria" sobre a diferença entre cara um, seria que o session_unset(); só vai destruir a sessão caso ela exista e o session_destrouy(); não faz essa verificação logo ele gera um erro caso não tenha tido um session_start(); antes dele. É isso mesmo ou eu to falando bobagem?

PS:

 

Existe dois tipos de pessoas, as que sabem tudo e as que procuram saber!
Eu procuro saber, porque as que sabem tudo é que enfrentam as piores dificuldades da vida.

[William's]

 

Essa frase que você usa é muito show vei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

@session_start();

 

 

O código aqui só funcionou usando ele. Pelo que entendi acredito que ele repasse a sessão para outros arquivos (como se fosse uma ponte) é isso mesmo?

É a mais importante das funções de sessão. Sem ela o servidor não sabe que existe uma sessão ativa para trabalhar. Mais até! Sem ela, o superglobal $_SESSION sequer existe.

 

Mas é de vital importância não usar o @ na frente. Deixa a Aplicação gritar suas dores para que você corrija senão é dor de cabeça na certa. :thumbsup:

E uma outra dúvida a diferença entre o session_unset(); e o session_destroy();

O manual não é lá muito claro sobre isso. <_<

 

session_unset(), quando informado um argumento, equivale ao mesmo que unset() sobre um determinado índice de $_SESSION.

 

Mas o manual nos orienta a não usar session_unset() se estivermos usando $_SESSION. Sabe-se lá que outras formas obscuras de armazenamento de dados era possível nos idos do PHP 4.0.6. :upset:

 

A diferença maior é que como o superglobal $_SESSION só existe se session_start() for invocada e resultar em sucesso, unset() vai retornar um erro de variável indefinida pois o superglobal não existe ainda.

 

session_unset(), por outro lado, não. Ele fica quietinho na dele. se conseguir trabalhar, trabalha. Se não, nem liga. :lol:

 

Por fim, eu testei aqui e session_destroy() apesar de sugerir que destróí a sessão, não. Os dados são mantidos, é possível continuar armazenando novos dados no superglobal e inclusive acessando os antigos.

 

O único comportamento que eu percebi é que você pode invocar session_start() depois de session_destroy() sem receber nenhum erro (afinal a sessão anterior foi "destruída").

 

Porém, se você fizer isso, todos os dados anteriores à session_destroy() somem. :wacko:

 

Pelo sim, pelo não, se os dados de sessão não são mais necessários destrua tudo referente à eles, como mostra o snippet de session_destroy().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno Augusto, muito obrigado cara ajudou bastante!

 

Porém com relação a minha primeira dúvida não era com relação ao session_start();(Também acho que não fui muito claro com relação a isso srsrs) e sim com relação ao "@" na frente. Mas analisando o que você mesmo citou acredito que impeça alguns tipos de erros de serem exibidos na aplicação.

 

É pq aqui dividi essa parte em 3.

 

1- O que ta dentro da parte de login do sistema ou ja contem um session_start();

 

2- O arquivo que faz o controle de sessão.

 

3- Todo o resto do sistema que executa o include desse arquivo.

 

A questão que só tava dando o session_start(); no login e não tava funcionado ai quando coloquei o @session_start(); no meu aquivo de controle de sessão a coisa começou a funcionar, foi por isso que fiz a analogia a um ponte, pois achei que ele estaria passando o meu session_start(); do meu login para o arquivo que faz o controle de sessão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhando por esse ângulo, sim. session_start() faz a ponte entre as requisições para que cada subsequente saiba que há algum previamente definido para se trabalhar.

 

Mas analisando o que você mesmo citou acredito que impeça alguns tipos de erros de serem exibidos na aplicação.

 

Eu poderia até dizer que todos, mas realmente não. Tem alguns erros mais.. críticos, que próprio core do PHP dispara que o arroba não esconde.

 

Infelizmente não tenho 100% de certeza também, pois nunca vivencie um erro desses.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhorei o código que você passou no link, e fiz um exemplo com 60 segundos

Se quiser mais é só ir multiplicando... + 60 * 2 = 120 segundos hehehe básico

 

No seu login você seta a sessão abaixo.

$_SESSION["sessiontime"] = time() + 60;

depois e só chamar este código abaixo dentro de um arquivo de segurança em todas as páginas restritas.

<?php
session_start(); 
if ( isset( $_SESSION["sessiontime"] ) ) { 
	if ($_SESSION["sessiontime"] < time() ) { 
		session_unset();
		echo "Seu tempo Expirou!";
		//Redireciona para login
	} else {
		echo 'Logado ainda!';
		//Seta mais tempo 60 segundos
		$_SESSION["sessiontime"] = time() + 60;
	}
} else { 
	session_unset();
	//Redireciona para login
}

Dúvida poste ae!

 

Toh precisando exatamente disso!!!

 

Usei seu script, tá bem legaw... gostaria de ajuda pra fazê-lo ficar ajustado ao q preciso, topo, exibir o tempo como relógio(cronometro) no site, e sair do site quando expirar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal,será que tem como incorporar esse cód acima ao meu?

<?php

// A sessão precisa ser iniciada em cada página diferente
if (!isset($_SESSION)) session_start();

// Verifica se não há a variável da sessão que identifica o usuário
if (!isset($_SESSION['UsuarioID'])) {
// Destrói a sessão por segurança
session_destroy();
// Redireciona o visitante de volta pro login
header("Location: index.php"); exit;
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.