Ir ao conteúdo

Problemas com as sessões do PHP


Edu Apokalipse

Posts recomendados

Postado

Olá amigos.

Desenvolvi um site com sistema de login, e estou enfrentando problemas com as sessões do php ($_SESSION)

Tudo aparenta funcionar perfeitamente, mas, às vezes (e não dá pra prever quando), a seção enlouquece!

Às vezes, quando o usuário vai acessar outro menu do site a sessão se perde, e mostra como se o usuário tivesse logado (no cabeçalho do site fica descrito o nome do cara, tipo aqui no fórum, e, sem mais nem menos, some, como se ele tivesse deslogado.)

Outra coisa que acontece é que, as vezes, mesmo quando o cara faz o logout, depois de alguns minutos trocando de menus e tal, simplesmente reaparece a sessão (volta a aparecer o 'bem vindo usuário' no topo da página Oo).

Vocês sabem o que eu posso fazer para testar essas coisas?

Se precisarem ver, aqui está o meu código para setar a sessão:

Formulário de login (que fica no cabeçalho do site, estilo twitter)

verifica_sessao.php

<? ob_start(); session_start();?>
<script language="javascript">
<?php include "../inc/js/login.js"; // este é apenas um arquivo para validar se os campos de login foram preenchidos corretamente ?>
</script>
<?php if (isset($_SESSION['nome']))
{
if ($_SESSION['tipo'] == 1)
{
include '../inc/default.php';
echo "<div id='header'><div id='container' class='area_login'><div id='topnav' class='topnav'>Bem vindo, Anunciante <strong>". $_SESSION['nome'] ."</strong>!  <a href=../login/logout.php><b>Sair</b></a></div></div>";
}
elseif ($_SESSION['tipo'] == 0)
{
include '../inc/default.php';
echo "<div id='header'><div id='container' class='area_login'><div id='topnav' class='topnav'>Bem vindo, Usuário <strong>". $_SESSION['nome'] ."</strong>!  <a href=../login/logout.php><b>Sair</b></a></div></div>";
}
}
else
{
include '../inc/default.php';
echo

"<div id='header'>
<div id='container' class='area_login'>
<div id='topnav' class='topnav'> Já possui uma conta cadastrada? <a href='login' class='signin'><span>Entrar</span></a> </div>
<fieldset id='signin_menu'>
<form method='post' id='signin' name='signin' onSubmit='return valida_login();' action='../login/verifica_usuario.php'>
<label for='username'>Login</label>
<input id='username' name='usuario' value='' title='username' tabindex='4' type='text'></p>
<p>
<label for='password'>Senha</label>
<input id='password' name='senha' value='' title='password' tabindex='5' type='password'>
</p>
<p class='remember'>
<input id='signin_submit' value='Logar' tabindex='6' type='submit'>
<!--<input id='remember' name='remember_me' value='1' tabindex='7' type='checkbox'>
<label for='remember'>Continuar Conectado</label>-->
</p>
<p> <a id=esqueceu_senha_link title='Se você selecionar esta opção, sua senha cadastrada no servidor será enviada para o email cadastrado.' href='../login/gerar_nova_senha.php'>Esqueceu sua senha?</a>
<p class='forgot'> <a href='../login/alterar_senha.php'>Deseja alterar sua senha?</a> </p>
</p>
</form>
</fieldset>
</div>";

}?>

O formulário de login manda os dados pra cá:

verifica_usuario.php

<?php ob_start(); 
session_start();?>

<script language="javascript">
<?php include "../inc/js/login.js"; //javascript de validação dos campos ?>
</script>

<?php require "../inc/config.php"; // aqui inclui a conexao com o banco?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<?php include '../inc/default.php'; //aqui inclui a CSS ?>
<?php

echo "<div id='header'>
<div id='container' class='area_login'>
<div id='topnav' class='topnav'> Já possui uma conta cadastrada? <a href='login' class='signin'><span>Entrar</span></a> </div>
<fieldset id='signin_menu'>
<form method='post' id='signin' name='signin' onSubmit='return valida_login();' action='../login/verifica_usuario.php'>
<label for='username'>Login</label>
<input id='username' name='usuario' value='' title='username' tabindex='4' type='text'></p>
<p>
<label for='password'>Senha</label>
<input id='password' name='senha' value='' title='password' tabindex='5' type='password'>
</p>
<p class='remember'>
<input id='signin_submit' value='Logar' tabindex='6' type='submit'>
<!--<input id='remember' name='remember_me' value='1' tabindex='7' type='checkbox'>
<label for='remember'>Continuar Conectado</label>-->
</p>
<p> <a id=esqueceu_senha_link title='Se você selecionar esta opção, sua senha cadastrada no servidor será enviada para o email cadastrado.' href='../login/gerar_nova_senha.php'>Esqueceu sua senha?</a>
<p class='forgot'> <a href='../login/alterar_senha.php'>Deseja alterar sua senha?</a> </p>
</p>
</form>
</fieldset>
</div>"; ?>
<title>Meu site.</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">


<?php include '../inc/funcoes.php'; //aqui eu incluo funções/padrão que eu utilizo em todo site ?>

</head>

<body>
<?php include '../inc/header.php'; //inclui o menu superior do site ?>
<div id="main">
<div class="inside">
<div class="area_conteudo">
<div class="desc_modulo">
<?php
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];

if((!$usuario) || (!$senha)){
echo "<div class='boxErro'><p><strong>Por favor, todos campos devem ser preenchidos!</strong></p></div></div><p> </p> ";
include "../inc/form_login.php";
}
else{
$senha = md5($senha);
$sql = mysql_query("SELECT * FROM pessoas WHERE login='{$usuario}' AND senha='{$senha}' AND ativado='1'");
$login_check = mysql_num_rows($sql);
if($login_check > 0){
while($row = mysql_fetch_array($sql)){
foreach( $row AS $key => $val ){
$$key = stripslashes( $val );
}
$_SESSION['id_pessoa'] = $id_pessoa;
$_SESSION['nome'] = $nome;
$_SESSION['email'] = $email;
$_SESSION['telefone'] = $telefone;
$_SESSION['tipo'] = $tipo;
$_SESSION['cnpj'] = $cnpj;
mysql_query("UPDATE pessoas SET data_ultimo_login = now() WHERE id_pessoa ='{$id_pessoa}'");
header("Location: ../home/index.php");
}

}
else{

echo "<div class='boxErro'><p><strong>O usuário e senha informados não correspondem!</strong></p></div></div><p> </p>";

include "../inc/form_login.php";

}
}?>

</div>
<div class="sombra_lateral"> </div>

</div>
</div>

<?php include '../inc/footer.php'; //rodapé ?>

</body>
</html>

logout.php

<?php session_start();

include '../inc/default.php';

echo "<div id='header'>
<div id='container' class='area_login'>
<div id='topnav' class='topnav'> Já possui uma conta cadastrada? <a href='login' class='signin'><span>Entrar</span></a> </div>
<fieldset id='signin_menu'>
<form method='post' id='signin' action='../login/verifica_usuario.php'>
<label for='username'>Login</label>
<input id='username' name='usuario' value='' title='username' tabindex='4' type='text'></p>
<p>
<label for='password'>Senha</label>
<input id='password' name='senha' value='' title='password' tabindex='5' type='password'>
</p>
<p class='remember'>
<input id='signin_submit' value='Logar' tabindex='6' type='submit'>
<!--<input id='remember' name='remember_me' value='1' tabindex='7' type='checkbox'>
<label for='remember'>Continuar Conectado</label>-->
</p>
<p> <a id=esqueceu_senha_link title='Se você selecionar esta opção, sua senha cadastrada no servidor será enviada para o email cadastrado.' href='../login/gerar_nova_senha.php'>Esqueceu sua senha?</a>
<p class='forgot'> <a href='../login/alterar_senha.php'>Deseja alterar sua senha?</a> </p>
</p>
</form>
</fieldset>
</div>";
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Meu site.</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<?php include '../inc/funcoes.php'; ?>

</head>

<body>
<?php include '../inc/header.php'; ?>
<div id="main">
<div class="inside">
<div class="area_conteudo">
<div class="desc_modulo">
<?php
session_destroy();
if(!session_is_registered('nome')){
echo "<div class='boxSucesso_min'><p><strong>Você não está mais logado em nosso site!</strong></p></div>";
}?>

</div>
<p>
<div class="texto_tit_form">Acesse sua conta</div><br>
</p>
<?php include "../inc/form_login.php";?>
</div>
<div class="sombra_lateral"> </div>

</div>
</div>

<?php include '../inc/footer.php'; ?>

</body>
</html>

Só pra relembrar: Os códigos funcionam. O cara loga no site, consegue deslogar, tudo certinho. O problema é que ÀS VEZES, e não dá pra saber quando, a sessão se perde, ou 'ressussita' do nada.

Lembrando que isso é logo que eu realizo o login no sistema, portanto, não está perdendo a sessão por tempo.

Navegador utilizado: firefox 4.

abraços!

  • Moderador
Postado

ola amigo.. acho q tem muito lixo ali no meio. por exemplo nos eu formulario de login.. nao precisa ter sessions.. nem nada.. apenas o formulario. então no arquivo que recebe os dados do formulario.. ai sim você deve ter um session_start()

e nao precisa ter nenhum html ali.. deixe apenas o php para validaçoes... consultas sql.. e atribuir variaveis de sessao. e um header location para caso o usuario logue.

no logout..digo o mesmo.. nao há necessidade de ter tudo aquilo.. basta um session_destroy() e uma mensagem de aviso que deslogou... sugiro que de uma repensada melhor.. e procure aqui no forum mesmo nesta seção topicos similares de logins com sessions.

abraço

Postado

Opa, acho que resolvi!

O problema é que em uma certa página, eu puxava dados do banco e passava por GET em uma url, e essa URL passava o http://www.meusubdominio.meusite.com.br ao invés do link direto pro subdomínio: http://meusubdominio.meusite.com.br, e isso fazia com que os dados da sessão se perdessem.

Bem, depois que alterei os links até agora não deu mais o erro da sessão, acho que era isso então, hehe x)

Fica aí a dica pra quem passar por apertos.

abraços!

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!