Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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.
>
@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()](http://www.php.net/session_unset), quando informado um argumento, equivale ao mesmo que [unset()](http://www.php.net/unset) sobre um determinado índice de $_SESSION.
Mas o manual nos orienta a não usar [session_unset()](http://www.php.net/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()](http://www.php.net/session_start) for invocada e resultar em [sucesso, unset()](http://www.php.net/session_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().
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.
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.
Ok, vlw pela ajuda caras :joia:
>
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...
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;
}
?>
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.
} else { Dúvida poste ae!