Come on, your code contains several problems. But I'm here to help;), first the file validacookies.php
is not necessary, delete it.
I have rewritten your Scripts by putting some functions and a better logic (Not the best of all, but it will solve your problem).
File pegasenha.php :
<?php
// INICIA AS SESSÕES
session_start( );
// DEFINE O CÓDIGO COMO UTF-8
header( "Content-Type: text/html; charset=utf-8" );
// CONEXÃO COM BANCO DE DADOS
include "abre_banco.php";
/**
*
* Verifica se o campo informado possui um valor que precisa ser envolvido em aspas simples ou não, para poder inserir em um
* script SQL. Além disso, escapa todos os caracteres epeciais ( aspas simples, duplas, asteriscos, etc. )
*
* @author Moises Gama
* @param $string: String que será verificada
* @param [ $not_null ]: Indica que um campo não pode ser NULL. Se for "numeric", "0" ( zero ) será adicionado, e se for "string", ''
* @return String
* @category Funções
*
**/
function format_to_sql( $string, $not_null = NULL )
{
// SE NÃO FOR UM VALOR NULO ( NULL ), ADICIONA AS ASPAS SIMPLES
if( $string )
{
$string = "'" . addslashes( $string ) . "'";
}
elseif( $not_null )
{
$string = "'" . ( ( $not_null == "numeric" ) ? "0" : "" ) . "'";
}
else
{
$string = "NULL";
}
return $string;
}
/**
*
* Verifica se a diretiva "magic_quotes_gpc" está ativa ( "on" ) no php.ini e, caso não esteja, escapa os valores especiais
* da string com a função addslashes( ). Com essa função evitamos o escape de caracteceres especiais duas vezes.
*
* @author Moises Gama
* @param $string: String que será escapada ou não
* @return String
* @category Funções
*
**/
function escape_special_chars( $string )
{
return ( !get_magic_quotes_gpc( ) ) ? addslashes( $string ) : $string;
}
// CRIA A VARIÁVEL USUÁRIO E PREVINE CONTRA SQL INJECTION
$usuario = escape_special_chars($_POST["usuario"]);
// CRIA A VARIÁVEL SENHA E PREVINE CONTRA SQL INJECTION
$senha = escape_special_chars($_POST["senha"]);
// CRIPTOGRAFA A VARIÁVEL SENHA EM MD5
$senha = md5($senha);
// SELECT PARA VERIFICAR SE O USUÁRIO ESTÁ NO BANCO DE DADOS
$selecionar_usuario = "SELECT * FROM login WHERE usuario = " . format_to_sql( $usuario ) . " AND senha= " . format_to_sql( $senha ) . "";
// EXECUTA O SELECT
$executar_sql = mysql_query($selecionar_usuario);
// CONTA QUAL É QUANTIDADE DE RETORNO O SELECT
$quantidade_resultados = mysql_num_rows($executar_sql);
// CRIA O FETCH ASSOC PARA O SELECT CASO QUEIRA UTILIZAR
$usuarios_cadastrados = mysql_fetch_assoc($executar_sql);
// VERIFICA SE A QUANTIDADE DE RETORNOS É IGUAL A 1 (SE O USUÁRIO ESTÁ CADASTRADO)
if( $quantidade_resultado == 1 )
{
// CRIA A SESSÃO DE LOGIN COMO VERDADEIRA
$_SESSION["login_valido"] = true;
// CRIA A SESSÃO COM O NOME DO USUÁRIO
$_SESSION["nome_usuario"] = $usuario;
// CRIA A SESSÃO COM A SENHA DO USUÁRIO
$_SESSION["senha_usuario"] = $senha;
// REDIRECIONA PARA PÁGINA DESEJADA
header("Location: menu.php");
// PARA O SCRIPT
exit(0);
}
else
{
// CASO NÃO SEJA USUÁRIO RETORNA COM A MENSAGEM DE ERRO NO LOGIN
unset($_SESSION["login_valido"]);
// REDIRECIONA PARA PÁGINA DESEJADA COM MENSAGEM DE ERRO (OBS. VOCÊ PRECISA DAR UM GET NAS INFORMAÇÕES E MONTAR UMA MENSAGEM)
header("Location: index.php?msg=login-erro");
// PARA O SCRIPT
exit(0);
}
?>
Logout.php file :
<?php
// INICIA AS SESSÕES
session_start( );
// DEFINE O CÓDIGO COMO UTF-8
header( "Content-Type: text/html; charset=utf-8" );
// REMOVE SOMENTE A SESSION DESEJADA
unset( $_SESSION[ 'login_valido' ] );
// REMOVE TODAS AS SESSÕES
session_unset();
// DESTROI TODAS AS SESSION (VOCÊ DEVE PENSAR PARA QUE TUDO ISSO, É SOMENTE SEGURANÇA QUE ACABOU COM TUDO =] )
session_destroy();
// REDIRECIONA PARA PÁGINA DESEJADA COM MENSAGEM DE ERRO (OBS. VOCÊ PRECISA DAR UM GET NAS INFORMAÇÕES E MONTAR UMA MENSAGEM)
header("Location: index.php?msg=logout");
// PARA O SCRIPT
exit(0);
?>
How to verify user access and protect access:
<?php
// VERIFICA SE A SESSION EXISTE, CASO NÃO ELE É REDIRECIONADO
if( $_SESSION["login_valido"] != true )
{
// REMOVE A SESSION POR SEGURANÇA NOVAMENTE
unset($_SESSION["login_valido"]);
// REDIRECIONA PARA PÁGINA DESEJADA COM MENSAGEM DE ERRO (OBS. VOCÊ PRECISA DAR UM GET NAS INFORMAÇÕES E MONTAR UMA MENSAGEM)
header("Location: index.php?msg=sem-permissao");
// PARA O SCRIPT
exit(0);
}
?>