Ir para conteúdo

POWERED BY:

Arquivado

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

Jhow86

Comando back restaura a SESSION destruida! pq?

Recommended Posts

Fala Pessoal!!!!

 

seguinte eu tenho uma aplicação aqui que esta com um comportamento estranho.

 

Quando o usuario faz login eu inicio a SESSION e atribuo TRUE a uma variavel.

 

quando ele faz logoff eu uso o destruo a session com o comando session_destroy().

 

agora olhem o problema.

 

se o usuario usa o botão "voltar" do navegador uma vez, como nao existe session criada o sistema direciona ele para a pagina de login.

 

ate aqui tudo certo né...

 

mas se ele clicar umas 5 veses no botão voltar, o navegador consegue restaura toda a sessão que eu destrui quando o usuario clicou logoff???

 

 

como eu posso impedir esse comportamento?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom acho que nao deve ter ficado muito claro, o que esta acontecendo é o seguinte:

 

Qaundo reinicio a session ele cria um id: ex:(6b710e33ab1c99b0f83c072bcea644da)

 

ai depois uso o destroy para eliminala e quando clico no botão voltar do navegador ele reconstroy a seesion, inclusive com o mesmo id.

 

isso é totalmente inseguro, pois se o usuario ja fez logoff essa session nao deveria mais existir.

 

alguem tem alguma ideia agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é que ele reconstrói, quando você clica pra voltar ele VOLTA, voltar não é ATUALIZAR.

Volte e dê um F5.

 

Mas claro que você tem que tratar a sessão em toda página.

if(isset($_SESSION['ID']))
  header("Location: index.php");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é justin, mas mesmo verificando em toda pagina ela é validada olha o que eu faço:

 

na minha index tem um formulario com os campos login e senha

 

na pagina que executa a validação eu recebo os atributos via $_POST e valido o usuario,

 

se validado, coloco o valor true na variavel de sessao ($_SESSION['logado'] =true ) ele é direcionado para a pagina principal

 

na pagina principal ele clica no link logout e é direcionado para a pagina que executa o comando session_destroy();

 

até qui tudo bem mas se ele clicar no botao voltar 2 veses e atualizar a pagina ele acessa a pagina principal com se tivesse feito o login novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faça

 $_SESSION['bla'] = TRUE;

 

faça

 if(isset($_SESSION['bla']))

 

PS: Você só deu session_destroy();, ou fez o unsset delas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

até qui tudo bem mas se ele clicar no botao voltar 2 veses e atualizar a pagina ele acessa a pagina principal com se tivesse feito o login novamente. 

 

É isso que eu to falando, você está VOLTANDO e no ATUALIZANDO.

Ele nao VOLTA e ATUALIZA ao mesmo tempo.

 

você VOLTOU e ATUALIZOU ?

 

Mas antes corrija o script da session, faça o que o Back On falou.

Use no inicio da página:

 

session_start();
if(!isset($_SESSION['NOME_DE_UMA_SESSION']))
  header("Location: index.php");

Compartilhar este post


Link para o post
Compartilhar em outros sites

então eu faço o unset da variavel unsset('logado'); e para testar destruo a sessao ai eu executo um "print_r($_SESSION)" e realmente verifico que tudo foi finalizado. mas quando clico no botão voltar a SESSION se recupera como se nunca tivesse sido apagada

 

entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando a pessoa clicar em logoff ao ivés de usar session_destroy() use unset() na session desejada.

no seu caso unset($_SESSION['logado']);

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

gente eu to falando que depois de VOLTAR a PAGINA eu ATUALIZO e depois de ATUALIZAR a variavel que usei o usset($_SESSION['logado']) recupera seu valor inicial.

 

eu acho que ao atualizar o $_POST executa novamente quando eu retorno, será que é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você está fazendo a verificação ?

 

Se você tiver fazendo:

if($_SESSION['logado'] = true)

 

Está errado! O certo é usar ==, dois iguais que significa comparação de valores.

Mas como não sei o que você tem agora no código, posta aí por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz o codigo ta todo orientado, vou ter que separar as classes pra poder postar, etav tentando nao precisar postar ele mas faz parte..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o seguinte na página de logout:

 

<?php
ob_start();
session_start();
unset($_SESSION['sessão que tenque ser finalizada']);
unset($_SESSION['outra sessão que tenque ser finalizada']);
session_destroy();
echo '<script language = "JavaScript">

location.href="pagina.html"

</script>';
?>

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.