Ir para conteúdo

Arquivado

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

calintro

Destruir sessões ao fechar navegador

Recommended Posts

O problema é o seguinte: No meu PC as sessões são destruídas sem problemas quando eu fecho o navegador, mas no PC do cliente isso não acontece, a sessão fica armazenada e não se destrói nunca. Já procurei no Google e testei algumas soluções, mas nenhuma funcionou no PC dele. O que pensei então é em destruir a sessão por tempo ocioso no site, qual o melhor jeito de fazer? Já testei algumas funções do PHP que não deram certo, porque não tenho acesso ao php.ini do servidor. Ou até mesmo uma boa solução pra sessões se destruirem ao fechar o navegador.

 

session_start();
$_SESSION["nome"] = $nome;
$_SESSION["id"] = $id;

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

procure por configurações em tempo de execução

 

http://php.oregonstate.edu/manual/en/sessi...nfiguration.php

 

veja também como usar controles de conexão

 

http://php.net/ignore_user_abort

Eu tentei usar algumas coisas daí com o ini_set e não tive muito sucesso, devo estar fazendo alguma coisa errado.

 

 

Cara... tenta executar alguma coisa no evento "unload" do navegador, tipo assim:

<body onUnload="<?php session_destroy()?>">

O problema do onUnload é que quando troca de página ele também vai destruir a sessão. No caso do meu sistema que é administrativo e cheio de seções fica inviável, qualquer outra seção que o usuário vá ele vai acionar o onUnload. Teria alguma opção no onUnload para que seja feita só quando clicar no X mesmo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao sei o que você está fazendo , mas com certeza o controle de conexao resolve o problema

 

http://php.net/ignore_user_abort

Eu estava usando o comando ini_set para alterar o tempo de duração das sessões, mas não deu muito certo.

 

Exemplo do que fiz:

 

session_cache_limiter('private');
session_cache_expire(1);
session_start();

Como eu usaria esse ignore_user_abort? Eu dei uma lida e pesquisada no Google sobre isso mas não entendi muito bem.

 

 

 

Obrigado! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

o exemplo está na proprio link

 

 

 

antes, execute isso:

 

tmp.php

<?php
session_start();

$sessPath   = ini_get('session.save_path');
$sessCookie = ini_get('session.cookie_path');
$sessName   = ini_get('session.name');
$sessVar	= 'foo';

echo '<br>sessPath: ' . $sessPath;
echo '<br>sessCookie: ' . $sessCookie;

echo '<hr>';

if( !isset( $_GET['p'] ) ){
	// instantiate new session var
	$_SESSION[$sessVar] = 'hello world';
}else{
	if( $_GET['p'] == 1 ){

		// printing session value and global cookie PHPSESSID
		echo $sessVar . ': ';
		if( isset( $_SESSION[$sessVar] ) ){
			echo $_SESSION[$sessVar];
		}else{
			echo '[not exists]';
		}

		echo '<br>' . $sessName . ': ';

		if( isset( $_COOKIE[$sessName] ) ){
		echo $_COOKIE[$sessName];
		}else{
			if( isset( $_REQUEST[$sessName] ) ){
			echo $_REQUEST[$sessName];
			}else{
				if( isset( $_SERVER['HTTP_COOKIE'] ) ){
				echo $_SERVER['HTTP_COOKIE'];
				}else{
				echo 'problem, check your PHP settings';
				}
			}
		}

	}else{

		// destroy session by unset() function
		unset( $_SESSION[$sessVar] );

		// check if was destroyed
		if( !isset( $_SESSION[$sessVar] ) ){
			echo '<br>';
			echo $sessName . ' was "unseted"';
		}else{
			echo '<br>';
			echo $sessName . ' was not "unseted"';
		}

	}
}
?>
<hr>
<a href=tmp.php?p=1>test 1 (printing session value)</a>
<br>
<a href=tmp.php?p=2>test 2 (kill session)</a>

 

se estiver funcionando, provavelmente há algo errado no seus scripts.

Compartilhar este post


Link para o post
Compartilhar em outros sites

as session se auto destroi quando fecha o navegador, porque as session nao tem tempo de vida

se seu cliente ta fechando o navegador e quando abre ele se mantem logado por exemplo é porque tem cookie salvando o estado do cliente

 

alias só pra constar as session tbm sao cookies só que elas sao salvas no servidor, e quando se fecha o navegador elas sao apagadas, entao eu acho melhor você ver qual o problema do micro cliente porque nao é normal do que tentar fazer alguma gambiarrada no sistema.

 

mas em todo caso se quiser postar como você ta criando as session posta ai

 

OBS: o exemplo com unload nao ira funcionar porque o PHP le a pagina inteira e nao sera executado nada no unload

mesma coisa que tentar fazer um if em javascript com resultado em PHP, pois o PHP nao vai respeitar a if, como falei o PHP le a pagina inteira ate o fim e vai executando tudo que encontrar no caminho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia a todos...

 

Realmente o unload da forma que eu postei não vai funcionar, o Fabyo tem razão no que disse.

 

No meu caso aqui no unload eu estou executando uma função usando AJAX que executa as tarefas que preciso.

 

Quanto ao problema das mudanças de página, aqui eu estou usando frames, então isso funciona.

Se colocasse no frame principal, e quando os frames secundários fossem alterados (mudança de páginas) nada aconteceria. Somente executaria a função quando realmente saisse do sistema.

 

Mas aparentemente você não está usando frames né?!

 

Pra falar a verdade agora eu também estou bem curioso para ver a solução deste caso... continuarei pensando em alguma coisa por aqui.

 

sds

Compartilhar este post


Link para o post
Compartilhar em outros sites

o meu PC as sessões são destruídas sem problemas quando eu fecho o navegador, mas no PC do cliente isso não acontece, a sessão fica armazenada e não se destrói nunca

o trecho e negrito.

 

você checou se isso acontece e como ocorre ?

 

se você estiver se baseando apenas numa informação que um cliente te informou é melhor verificar.

 

o que pode ter ocorrido é o cliente usar browser que tenha suporte a navegação por abas.

 

as sessões permanecem ativas na janela. se o usuário fechar uma aba e abrir novamente a sessão continuará sendo utilizada a não ser que seja explicitamente destruída.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu pedi pra ele verificar isso, inclusive a janela de "Downloads" caso utilize o Firefox também. Enfim, o final da história ficou assim: Testei em vários PCs e todos ficaram certos, então o problema era no PC do cliente mesmo, mas conversamos e ficou tudo ok. Nada de códigos mirabolantes ou gambiarrentos hahahaa

 

Obrigado a todos http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Amigo se o problema está no "COOKIE" basta você colocar

unset($_COOKIE) //irá limpar o cookie

antes de abrir a sessão:

session_start();

pa_de_ouro_923_149.jpg

 

Tem um monte de tópico novo, porque não respondê-los?

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.