Ir para conteúdo

Arquivado

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

icarof

Problemas com session_destroy();

Recommended Posts

Olá galera.

 

no meu sistema de login ta estranho

para logar e todas as validações ele funciona beleza, mas quando faz o logoff, onde era pra destruir a seção e os dados, não acontece, tipo, quando clica pra sair ele volta pra pagina de login, mas se você alterar no navegador, login.php por index.php ele entra na index como se a pessoa ivesse autenticado.

 

pelo que percebi a seção so ta sumindo quando eu fecho o navegador.

 

segue codigos:

 

Validacao

<?php
// Inclui o arquivo com o sistema de segurança
include("seguranca.php");

// Verifica se um formulário foi enviado
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Salva duas variáveis com o que foi digitado no formulário
// Detalhe: faz uma verificação com isset() pra saber se o campo foi preenchido
$usuario = (isset($_POST['usuario'])) ? $_POST['usuario'] : '';
$senha = (isset($_POST['senha'])) ? $_POST['senha'] : '';

// Utiliza uma função criada no seguranca.php pra validar os dados digitados
if (validaUsuario($usuario, $senha) == true) {
// O usuário e a senha digitados foram validados, manda pra página interna
header("Location: index.php");
} else {
// O usuário e/ou a senha são inválidos, manda de volta pro form de login
// Para alterar o endereço da página de login, verifique o arquivo seguranca.php
expulsaVisitante();
}
}
?>

Logoff

<?php
	session_destroy();
	header("location: login.php"); 
	exit; // Redireciona o visitante
?>

Segurança

<?php
//  Configurações do Script
// ==============================
$_SG['conectaServidor'] = true;    // Abre uma conexão com o servidor MySQL?
$_SG['abreSessao'] = true;         // Inicia a sessão com um session_start()?

$_SG['caseSensitive'] = false;     // Usar case-sensitive

$_SG['validaSempre'] = true;       // Deseja validar o usuário e a senha a cada carregamento de página?
// Evita que, ao mudar os dados do usuário no banco de dado o mesmo contiue logado.

$_SG['servidor'] = 'localhost';    // Servidor MySQL
$_SG['usuario'] = 'root';          // Usuário MySQL
$_SG['senha'] = '';                // Senha MySQL
$_SG['banco'] = 'sertao';            // Banco de dados MySQL

$_SG['paginaLogin'] = 'login.php'; // Página de login

$_SG['tabela'] = 'usuarios';       // Nome da tabela onde os usuários são salvos
// ==============================

// ======================================
//   ~ Não edite a partir deste ponto ~
// ======================================

// Verifica se precisa fazer a conexão com o MySQL
if ($_SG['conectaServidor'] == true) {
$_SG['link'] = mysql_connect($_SG['servidor'], $_SG['usuario'], $_SG['senha']) or die("MySQL: Não foi possível conectar-se ao servidor [".$_SG['servidor']."].");
mysql_select_db($_SG['banco'], $_SG['link']) or die("MySQL: Não foi possível conectar-se ao banco de dados [".$_SG['banco']."].");
}

// Verifica se precisa iniciar a sessão
if ($_SG['abreSessao'] == true) {
session_start();
}

/**
* Função que valida um usuário e senha
*
* @param string $usuario - O usuário a ser validado
* @param string $senha - A senha a ser validada
*
* @return bool - Se o usuário foi validado ou não (true/false)
*/
function validaUsuario($usuario, $senha) {
global $_SG;

$cS = ($_SG['caseSensitive']) ? 'BINARY' : '';

// Usa a função addslashes para escapar as aspas
$nusuario = addslashes($usuario);
$nsenha = addslashes($senha);

// Monta uma consulta SQL (query) para procurar um usuário
$sql = "SELECT `id`, `nome` FROM `".$_SG['tabela']."` WHERE ".$cS." `usuario` = '".$nusuario."' AND ".$cS." `senha` = '".$nsenha."' LIMIT 1";
$query = mysql_query($sql);
$resultado = mysql_fetch_assoc($query);

// Verifica se encontrou algum registro
if (empty($resultado)) {
// Nenhum registro foi encontrado => o usuário é inválido
return false;

} else {
// O registro foi encontrado => o usuário é valido

// Definimos dois valores na sessão com os dados do usuário
$_SESSION['usuarioID'] = $resultado['id']; // Pega o valor da coluna 'id do registro encontrado no MySQL
$_SESSION['usuarioNome'] = $resultado['nome']; // Pega o valor da coluna 'nome' do registro encontrado no MySQL

// Verifica a opção se sempre validar o login
if ($_SG['validaSempre'] == true) {
// Definimos dois valores na sessão com os dados do login
$_SESSION['usuarioLogin'] = $usuario;
$_SESSION['usuarioSenha'] = $senha;
}

return true;
}
}

/**
* Função que protege uma página
*/
function protegePagina() {
global $_SG;

if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
// Não há usuário logado, manda pra página de login
expulsaVisitante();
} else if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
// Há usuário logado, verifica se precisa validar o login novamente
if ($_SG['validaSempre'] == true) {
// Verifica se os dados salvos na sessão batem com os dados do banco de dados
if (!validaUsuario($_SESSION['usuarioLogin'], $_SESSION['usuarioSenha'])) {
// Os dados não batem, manda pra tela de login
expulsaVisitante();
}
}
}
}

/**
* Função para expulsar um visitante
*/
function expulsaVisitante() {
global $_SG;

// Remove as variáveis da sessão (caso elas existam)
unset($_SESSION['usuarioID'], $_SESSION['usuarioNome'], $_SESSION['usuarioLogin'], $_SESSION['usuarioSenha']);

// Manda pra tela de login
header("Location: ".$_SG['paginaLogin']);
}
?>

Nota esse codigo não é meu, so adaptei para minha necessidades.

 

Alguem tem alguma ideia do porque não ta apagando as sesões?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em vez do session_unset(), já tentou o session_destroy()?

 

coloca um comando após o session_destroy() para imprimir na tela a sessão. Assim tem como verificar o que está acontecendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você quer destruir uma sessão que nem foi iniciada no arquivo?

Para resolver esse problema basta adicionar um session_start() antes do session_destroy().

Compartilhar este post


Link para o post
Compartilhar em outros sites

velho, tenta dar um

session_unset() ;

sesson_destroy();

 

vc ainda pode colocar um print_r($_SESSION) para ver o que está mostrando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em vez do session_unset(), já tentou o session_destroy()?

 

coloca um comando após o session_destroy() para imprimir na tela a sessão. Assim tem como verificar o que está acontecendo.

A função só remove os dados para redirecionar a pagina, por causa ds niveis de permissão, ja tentei elinar as variaveis antes e depois de destruir a sessão.

 

 

Como você quer destruir uma sessão que nem foi iniciada no arquivo?

Para resolver esse problema basta adicionar um session_start() antes do session_destroy().

Graity, a sessão é iniciado assim que efetua o login, ai armazena os dados basico para manter o usuario na pagina, tipo é preciso criar uma sessão nova no arquivo de logoff?

Quando tiro o redirecionamento fica isso

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in C:\xampp\htdocs\sertao\administration\logout.php on line 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim..

 

<?php

session_start();
session_destroy();
session_unset()

header("location: login.php");
exit; // Redireciona o visitante
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

A função só remove os dados para redirecionar a pagina, por causa ds niveis de permissão, ja tentei elinar as variaveis antes e depois de destruir a sessão.

 

 

Graity, a sessão é iniciado assim que efetua o login, ai armazena os dados basico para manter o usuario na pagina, tipo é preciso criar uma sessão nova no arquivo de logoff?

Quando tiro o redirecionamento fica isso

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in C:\xampp\htdocs\sertao\administration\logout.php on line 3

Sim o proprio erro diz o que está acontecendo: "Trying to destroy uninitialized session in C:\xampp\htdocs\sertao\administration\logout.php on line 3", ou seja, tentando destruir uma sessão não inicializada no arquivo!

 

Todo arquivo novo que você criar e quiser alterar, usar os dados ou até mesmo deletar essas sessões, você deve inicializar ela(s) no arquivo com session_start().

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim..

 

<?php

session_start();

session_destroy();

session_unset()

header("location: login.php");

exit; // Redireciona o visitante

?>

realmente mesmo deixando index.php na header, ele leva pra pagina de login, mas bronca fica a mesma, se mudar no navegador vai voltar pra index,ate a pessoa fechar o navegador.

 

Isso deixa alguma brecha grave na seguança? tem como armazenar a seessão em um cookie?

 

 

Alguma dica ?

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.