PHP - Finalizando uma sessão.

280 views
Skip to first unread message

tibone

unread,
Jun 3, 2009, 11:40:15 AM6/3/09
to Tche...@googlegroups.com
Olá,

Estou fazendo um sistema bem básico de login em php usando mysql.
Estou usando as sessões de php para poder garantir que o usuário está logado.

O problema está que não estou conseguindo fazer o usuário deslogar, encerrando ou terminando a sessão, ela fica aberta por tempo indeterminado (ou tem um timeout default no PHP5.2 ?), e eu quero colocar a opção de logout, já que fiz um if para checar pelo $_SESSION.

Bom, para facilitar, estou usando os seguintes códigos :


//Para criar a sessão (depois de validado o user/pass)
session_start();
$_SESSION['sessao'] = "logado";
header("location:login_success.php"); //redirecionada para a página com as informações somente para usuários logados.

//Para verificar a sessão
session_start();
if(!$_SESSION['sessao']=="logado"){
header("location:main_login.php"); //volta para a tela de login
}
//página para usuarios logados.

//Para terminar a sessão
session_start();
session_destroy();
unset($_SESSION['sessao']);
unset($sessao);



O problema ocorre que mesmo executando o comando de logout, se eu abrir o login_success.php, ele considera como logado. Se eu der um
print_r($_SESSION);
o resultado é
Array ( [user] => [pass] => [sessao] => logado )

Ou seja, ele está criando a sessão com o nome de "logado" , não ?
Tanto que ele não volta para o main_login.php
apenas se eu deletar o cache e as sessões autenticadas do Firefox.

Alguma idéia de como fazer este controle ?
A documentação do php.net indica utilizar o unset na variavel usada para criar a sessão.

Grato, e perdão pelo e-mail longo, tentei condensar o máximo de informações relevantes.


Juliano

tibone

unread,
Jun 3, 2009, 3:03:52 PM6/3/09
to Tche...@googlegroups.com
Apenas completando, após penar por algumas horas, e lendo toda a documentação do php.net sobre sessões, consegui fazer funcionar, usando a seguinte ordem de comandos :

<?PHP
session_start();
session_unset();
session_destroy();
$_SESSION = array();
header("location:index.php");
?>

Usando assim, ele desloga e encerra a sessão corretamente.

2009/6/3 tibone <tib...@gmail.com>

Marcelo Goebel Machado

unread,
Jun 3, 2009, 4:45:11 PM6/3/09
to Tche...@googlegroups.com
bom.. eu utilizo um botao de logout (sair), apenas eh um link para o seguinte arquivo

logout.php
<?
session_start();


session_destroy();

header("Location: index.php");
?>

ou seja.. ele vai para esse arquivo.. termina a sessão.. e eh redirecionado para o index...


espero ter ajudado

2009/6/3 tibone <tib...@gmail.com>



--
Marcelo Goebel Machado
Linux User #487769 -- http://counter.li.org/

http://aprendendoolinux.blogspot.com

http://jornalomomento.org


Rudinei Dias

unread,
Jun 3, 2009, 6:24:18 PM6/3/09
to Tche...@googlegroups.com
use session_unset() antes do session_destroy.

http://www.php.net/manual/pt_BR/function.session-unset.php

A função session_unset() libera todas as variáveis da sessão
atualmente registradas.
unset($_SESSION) NÃO elimina completamente $_SESSION...

Rudinei Dias

2009/6/3 Marcelo Goebel Machado <mgoe...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages