Ir para conteúdo

POWERED BY:

Arquivado

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

Rogerio kleinkauf

SESSION expira assim que a pagina é recarregada

Recommended Posts

Boa noite, estou tendo problemas com SESSION assim que a pagina é recarregada a SESSION some, e assim não consigo fazer a restrição da página

 

Arquivo seguranca.php feito para restringir o acesso

<?php
if (!isset($_SESSION)) {
	session_start();
}
error_reporting(E_ALL);

if(!isset($_SESSION['nome'])){
		header("Location:index.php");
		exit();
	}
?>

login.php

<?php
session_start();
error_reporting(E_ALL);
require("../connection/database.php");

if(!empty($_POST['nome']) && !empty($_POST['senha'])){

	$ip = getenv("REMOTE_ADDR");
	$data=  date(' d/m/y à\s H:i ');
	$nome = mysql_real_escape_string($_POST['nome']);
	$senha = md5(mysql_real_escape_string($_POST['senha']));
	
		$query = "SELECT nome, senha FROM usuarios WHERE nome='$nome' AND senha='$senha' LIMIT 1";
		$sql = mysql_query($query);
		$verifica = mysql_num_rows($sql);
		
			if($verifica){
				$query = "UPDATE usuarios SET ultimo_acesso='$data',ip='$ip' WHERE nome='$nome' AND senha='$senha' LIMIT 1";
				$sql = mysql_query($query);
				$_SESSION['nome'] = $nome;
				echo "<script language='javascript'>
				location.href='painel.php';
				</script>";
			}else{
				echo "<script language='javascript'>alert('Nome e ou senha inválidos');
					 location.href='index.php';
					 </script>";
			}
}
?>

Pagina restrita:

<?php
require("seguranca.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" href="css/visaosoft.css" type="text/css" media="screen" />
<title>IMOBISIS - VisãoSoft</title>
</head>
<body>
Bem vindo:
<?php
echo $_SESSION['nome'];
?>	  
<a href="<?php session_destroy(); ?>">Logout</a>
</body>
</html>

PHPINFO

 

Imagem Postada

 

Video demonstração do erro: 1 mega, carrega na pagina em flash!

 

Video do erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser alguma diretiva do PHP.ini.

Não custa verificar lá na parte de sessoes.

 

E outra, troque a lógica desta condição:

 

if(isset($_SESSION['nome'])){

	}else{
		echo "<script language='javascript'>
				location.href='index.php';
				</script>";
		exit();
	}

Usando o operador de negação.

 

if(!isset($_SESSION['nome'])){
		header("Location:index.php");
		exit();
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim que a pagina é recarregada a SESSION some

recarregada você quer dizer na mesma janela ou após fechar uma janela ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim que a pagina é recarregada a SESSION some

recarregada você quer dizer na mesma janela ou após fechar uma janela ?

 

Ex: Abri a pagina painel.php que inclui o seguranca.php de primeira abre normal inclusive se dar um echo me retorna o valor da session, so que quando vou para outra pagina ou mesmo aperto F5, ou enter no browser é como se a Session deixasse de existir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ponha o "session_start()" dentro de uma condição de teste pra nao abrir outra sessão

não faz sentido..

além do mais, se o compilador não retornar erro, poderá gerar uma nova ID de sessão.

 

aliás, foi até bom comentar isso, pois ao chamar session_start() mais de uma vez pode ser gerados IDs ambíguos.

pode estar aí a causa do problema

 

verifique também se session.auto_start está desativado.

por padrão vem desativado, mas verifique.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ponha o "session_start()" dentro de uma condição de teste pra nao abrir outra sessão

não faz sentido..

além do mais, se o compilador não retornar erro, poderá gerar uma nova ID de sessão.

 

aliás, foi até bom comentar isso, pois ao chamar session_start() mais de uma vez pode ser gerados IDs ambíguos.

pode estar aí a causa do problema

 

verifique também se session.auto_start está desativado.

por padrão vem desativado, mas verifique.

 

Está desativado, eu chamo o session_start() na pagina verifica.php que é incluida em toda página restrita.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente usar aquela condição que postei.

 

busca nas páginas se nao está setando denovo as variáveis da sessão.

 

// $_SESSION['nome'] = $nome

// $_SESSION['nome'] = $nome

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente usar aquela condição que postei.

 

busca nas páginas se nao está setando denovo as variáveis da sessão.

 

// $_SESSION['nome'] = $nome

// $_SESSION['nome'] = $nome

Tentei usar Henry mas ainda não obtive sucesso, atualizei o post, a página que estou usando é somente para teste. vou postar o code dela para análise, Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe por "pegar o bonde andando". Pelo que eu entendi o problema esta no session_destroy();

 

o session_destroy como ja diz o nome, ele apaga toda sessao existentes e ele esta sendo usando quando e acessada a pagina restrita, entao a sessao é 'destroyda' e quando você recarregar nao vai existir ela mais e vai dar que expirou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe por "pegar o bonde andando". Pelo que eu entendi o problema esta no session_destroy();

 

o session_destroy como ja diz o nome, ele apaga toda sessao existentes e ele esta sendo usando quando e acessada a pagina restrita, entao a sessao é 'destroyda' e quando você recarregar nao vai existir ela mais e vai dar que expirou

Realmente erra isso, o ideal é criar outra página php para logout?, Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce pode fazer algo como:

em vez de

 

<a href="<?php session_destroy(); ?>">Logout</a>

usar:

 

<a href="<?php $_SERVER["PHP_SELF"]; ?>?logout=1">Logout</a>

ai no começo do script da pagina restrita você coloca:

 

if($_GET['logout']){
session_destroy();
ob_start();
header("Location: index.php"); //Ou o destino a ser redirecionando quando fazer logout
exit;
}

*é apenas uma dica, voce faz como achar melhor

Compartilhar este post


Link para o post
Compartilhar em outros sites

exatamente como o Rafael mostrou nesse post acima.

 

agora que vi o código fonte e também reparei isso.

 

achei estranho e resolvei postar, mas o Rafael postou antes

 

não faz sentido o que você tinha feito.

 

você estava destruindo a sessão automaticamente logo após criar, por isso não funcionava.

 

faça como Rafael sugeriu, mas aconselho nãio usar a função session_destroy().

 

utilize a função unset( )

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.