Ar0n 2 Denunciar post Postado Junho 24, 2013 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
Williams Duarte 431 Denunciar post Postado Junho 25, 2013 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
Ar0n 2 Denunciar post Postado Junho 25, 2013 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
Bruno Augusto 417 Denunciar post Postado Junho 25, 2013 @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
Ar0n 2 Denunciar post Postado Junho 25, 2013 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
Bruno Augusto 417 Denunciar post Postado Junho 26, 2013 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
Ar0n 2 Denunciar post Postado Junho 26, 2013 Ok, vlw pela ajuda caras :joia: Compartilhar este post Link para o post Compartilhar em outros sites
wneo 5 Denunciar post Postado Agosto 18, 2014 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
gugu3699 1 Denunciar post Postado Agosto 22, 2014 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