Ir para conteúdo

POWERED BY:

Arquivado

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

ThalysonCordeiro

[Resolvido] sessao não destroi

Recommended Posts

Gente, é o seguinte, tenho um sistema de login web, só que só consigo entrar uma vez. Tipo, eu logo com o usuario, beleza, entra normal e exibe o nome do usuario no topo, quando eu clico no botao sair, que é para excluir sessao, nao excluiu.

 

Para explicar melhor, é o seguinte, clico em sair, vai para pagina php que tem o codigo de excluir sessao, passa por la e redireciona para pagina login denovo (que é pro cara logar denovo), porem quando eu digito direto no link e coloco pra ir para index, entra normal com o ultimo usuario logado, na verdade o ultimo e unico. Pois mesmo eu tentando entrar com outro usuario, só mostra o nome do primeiro usuario com a sessao criada.

 

Pra eu logar com outro usuario e dar certo, só limpando o cache do navegador, entenderam ?

 

o que pode ser ? como posso resolver isso ?

 

ABAIXO MINHAS DUAS PAGINAS, TANTO DE LOGIN.PHP, QUANTO DE SAIR.PHP

 

LOGAR.PHP (RECEBE OS DADOS DO LOGIN E CRIA SESSAO)

<?php ob_start();
include("config.php");
$login = $_POST["txtlogin"];
$senha = $_POST["txtsenha"];
$tipo = $_POST["tipo"];
$login = str_replace (".", "", $login);
$login = str_replace ("-", "", $login);
$login = str_replace ("/", "", $login);
$sql_logar = "SELECT * FROM usuario WHERE documento = '$login' && senha = '$senha' && tipo = '$tipo'";
$exe_logar = mysql_query($sql_logar) or die (mysql_error());
$fet_logar = mysql_fetch_assoc($exe_logar);
$num_logar = mysql_num_rows($exe_logar);

if ($num_logar == 0){
  echo "<script>location.href='login.php?msg=Login ou senha inválido!'</script>";
} 
elseif($fet_logar['ativo'] == "N"){
  echo "<script>location.href='login.php?msg=Usuário cadastrado porém não ativado! Por favor, verifique seu e-mail para ativar sua conta. É possivel que o e-mail possa ter sido movido para quarentena.'</script>";
}
else{
  session_start();
  $_SESSION['nome'] = $fet_logar['nome'];
  $_SESSION['documento'] = $login;
  $_SESSION['senha'] = $senha;
  echo "<script>location.href='index.php'</script>";
}
?>

 

SAIR.PHP

<?php ob_start();
   session_start();
   session_destroy();
   echo "<script>location.href='login.php'</script>";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um jeito mais "amigável" de destruir uma session igual o exterminador do futuro.. rss

 

sair.php

<?php ob_start();
   session_start();
// destruir os dados associados à sessão
 $_SESSION["documento"] = array();

 // destruir o cookie relacionado a esta sessão
 if(isset($_COOKIE[session_name("documento")])){
   setcookie(session_name("documento"), '', time() - 1000, '/');
 }

 // destruir a sessão
 session_destroy(); 
 echo "<script>location.href='login.php'</script>";
?>

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Desculpe minha ignorância mas, Porque um segundo "session_start();" no SAIR.PHP ?

 

Amigo, o servidor tem que saber que você vai trabalhar com session na página.

 

Abraço.

 

Ainda que seja para destruí-la.. rss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perguntei porque há muito mais lógica usar o session_start(); passando o ID da sessão para retomar a mesma sessão, ou o servidor irá iniciar uma nova sessão, destruir a mesma, e a anterior continua lá. Pelo menos é o que entendi pela documentação do php.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Perguntei porque há muito mais lógica usar o session_start(); passando o ID da sessão para retomar a mesma sessão, ou o servidor irá iniciar uma nova sessão, destruir a mesma, e a anterior continua lá. Pelo menos é o que entendi pela documentação do php.

 

Não amigo, para cada session_id logado no momento, só existe um session com mesmo id, não é possível eu ter duas session com mesmo nome onde ambas possuem valores diferentes.

 

session_start() cria uma sessão (ou resume a sessão atual baseada numa id de sessão sendo passada via uma variável GET ou um cookie).
(http://php.net/manual/pt_BR/function.session-start.php)

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um jeito mais "amigável" de destruir uma session igual o exterminador do futuro.. rss

 

sair.php

<?php ob_start();
   session_start();
// destruir os dados associados à sessão
 $_SESSION["documento"] = array();

 // destruir o cookie relacionado a esta sessão
 if(isset($_COOKIE[session_name("documento")])){
   setcookie(session_name("documento"), '', time() - 1000, '/');
 }

 // destruir a sessão
 session_destroy(); 
 echo "<script>location.href='login.php'</script>";
?>

 

Abraço.

 

 

Brother, fiz do jeito que voc falou ai em cima e mesmo assim n deu ;s

não sei o que faço mais, é estranho. Será que eu estou iniciando a sessão errada ?

 

vou te passar a pagina "restrito.php" que se encarrega de verificar na pagina index.php se a sessao esta aberta ou não

 

RESTRITO.PHP, é chama no topo da pagina index.php com o include

<?php ob_start();
session_start();
if (! isset($_SESSION['documento']) && ! isset($_SESSION['senha'])){
  echo "<script>location.href='login.php'</script>";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da uma olhada

http://forum.imasters.com.br/topic/425708-problemas-com-session-destroy/

 

Experimenta inserir "session_unset();" antes de chamar o destroy.

 

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

 

Amigo, ainda n deu certo fazendo assim igual voc falou, ja tinha tentado antes e tentei denovo, e NADA, só pode que o erro é na hora de validar se a sessao esta criada ou nao, na pagina "restrito.php", por que não tem condição

Compartilhar este post


Link para o post
Compartilhar em outros sites

acredito que o problema é a função obstart(), então tente o seguinte código:

<?php
session_start();
//Bom, por via das dúvidas, aqui vai fazer um unset de cada session...
unset($_SESSION["nome"]);
unset($_SESSION["documento"]);
unset($_SESSION["senha"]);

if (! isset($_SESSION['documento']) && ! isset($_SESSION['senha'])){
      echo "<script>location.href='login.php'</script>";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

acredito que o problema é a função obstart(), então tente o seguinte código:

<?php
session_start();
//Bom, por via das dúvidas, aqui vai fazer um unset de cada session...
unset($_SESSION["nome"]);
unset($_SESSION["documento"]);
unset($_SESSION["senha"]);

if (! isset($_SESSION['documento']) && ! isset($_SESSION['senha'])){
      echo "<script>location.href='login.php'</script>";
}
?>

 

Não faz sentido, se eu destruir as sessões antes, sempre vai entrar nesse if ai e nunca vai logar, concorda ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jeito talvez mais certo de usar uma session (iniciar)

if( !isset($_SESSION) ) session_start();

 

Após destruir as sessões pelo nome acrescente:

session_destroy();

session_unset();

 

A verificação é apenas para ter certeza que foi 'unsetado' as Sessions, caso elas não existam, vai ir pro login.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jeito talvez mais certo de usar uma session (iniciar)

if( !isset($_SESSION) ) session_start();

 

Após destruir as sessões pelo nome acrescente:

session_destroy();

session_unset();

 

A verificação é apenas para ter certeza que foi 'unsetado' as Sessions, caso elas não existam, vai ir pro login.

 

mesmo assim não da certo amigo, eu ja n sei o que faço ;s

 

alguem tem um sistema de login que possa me passar pra eu refazer tudo ? obrigado

 

ou mandar um email pra que eu possa enviar os arquivos para me ajudar verifiar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já verificou se existe essas sessões?

Se elas tem algum valor?

Se está passando valor para elas no momento do login?

 

O que não está dando certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já verificou se existe essas sessões?

Se elas tem algum valor?

Se está passando valor para elas no momento do login?

 

O que não está dando certo?

 

 

Hiago, existir existe, como te falei, ela cria a sessão na seguinte pagina:

 

<?php ob_start();
include("config.php");
$login = $_POST["txtlogin"];
$senha = $_POST["txtsenha"];
$tipo = $_POST["tipo"];
$login = str_replace (".", "", $login);
$login = str_replace ("-", "", $login);
$login = str_replace ("/", "", $login);
$sql_logar = "SELECT * FROM usuario WHERE documento = '$login' && senha = '$senha' && tipo = '$tipo'";
$exe_logar = mysql_query($sql_logar) or die (mysql_error());
$fet_logar = mysql_fetch_assoc($exe_logar);
$num_logar = mysql_num_rows($exe_logar);

if ($num_logar == 0){
  echo "<script>location.href='login.php?msg=Login ou senha inválido!'</script>";
} 
elseif($fet_logar['ativo'] == "N"){
  echo "<script>location.href='login.php?msg=Usuário cadastrado porém não ativado! Por favor, verifique seu e-mail para ativar sua conta. É possivel que o e-mail possa ter sido movido para quarentena.'</script>";
}
else{
  session_start();
  $_SESSION['nome'] = $fet_logar['nome'];
  $_SESSION['documento'] = $login;
  $_SESSION['senha'] = $senha;
  echo "<script>location.href='index.php'</script>";
}
?>

depois na pagina index.php eu mando mostrar a sessão nome, ai mostra o nome certim, porem quando clico em sair passa pela pagina, redireciona para login.php, como deveria ser feito, só que se eu tentar logar com outro usuario, exibe o nome do usuario anterior, ou seja, a sessao n ta destruindo, ta no cache, alguma coisa assim, e n destroi até eu limpar o cache, ai sim da pra eu logar com o novo usuario e mostrar o nome dele normal.

 

assim que eu mostro o nome do usuario

<?php echo mb_strtoupper($_SESSION['nome']);?>

 

coloquei o meu sair.php dessa maneira:

<?php
session_start();
unset($_SESSION["nome"]);
unset($_SESSION["documento"]);
unset($_SESSION["idusuario"]);
session_destroy();
session_unset();
if(isset($_SESSION["documento"])){
echo "<script>location.href='index.php'</script>";
}else{
echo "<script>location.href='login.php'</script>";
}
?>

 

dessa forma ta indo pro login.php, ou seja, ta destruindo a sessao. Mas mesmo assim quando vou logar com outro usuario, mostra o nome que ta no cache, o nome errado do que estou logando.

 

talvez eu esteja fazendo ALGUMA COISA OU TUDO errado, por isso pedi se alguem tiver um sistema de login pra me passar eu agradeço

 

lembrando que localhost funciona TUDO normalmente ;s

 

uso o

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

tem alguma coisa haver tbm sera ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

gente, me ajudem ai, até hoje meu problema n foi resolvido, acessem www.designquality.com.br/lici

 

fazem o cadastro, de preferencia dois cadastros, pra testar o logout e se as sessoes estao funcionando .. verao o erro que ta dando, qualquer coisa me passam emais que mandarei meus arquivos completos, preciso muito resolver isso, ja n sei o que faço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que ter um botão de sair, quando ele for clicado, você usa o session_destroy();

 

mais esse botao sair eu ja fiz, ele ja existe, se voc fizer cadastro e logar, vera que tem um botao sair na area restrita

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você faz assim, coloca um botão em algum lugar, com imagem.

<a href="?logout"><img src="caminho da imagem" alt=""></a>
<?php
if ($_GET['logout']) {
session_destroy();
header("Location: local.php");
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você faz assim, coloca um botão em algum lugar, com imagem.

<a href="?logout"><img src="caminho da imagem" alt=""></a>
<?php
if ($_GET['logout']) {
session_destroy();
header("Location: local.php");
}
?>

 

 

o meu esta assim

 

<?php
session_start();
if(!isset($_REQUEST['logmeout'])){
   echo "Você realmente deseja sair da área restrita?<br />";
   echo "<a href=\"sair.php?logmeout\">Sim</a> | <a href=\"javascript:history.go(-1)\">Não</a>";
}
else{
   session_unset();
   session_destroy();
   if(!session_is_registered('documento')){
       echo "<script>location.href='login.php'</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.