icarof 9 Denunciar post Postado Outubro 3, 2014 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
marcelobbt 7 Denunciar post Postado Outubro 3, 2014 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
Gravity 0 Denunciar post Postado Outubro 3, 2014 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
arthnet 0 Denunciar post Postado Outubro 3, 2014 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
icarof 9 Denunciar post Postado Outubro 3, 2014 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
Marcos_imasters 288 Denunciar post Postado Outubro 4, 2014 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
Gravity 0 Denunciar post Postado Outubro 4, 2014 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
icarof 9 Denunciar post Postado Outubro 8, 2014 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