Autenticação (login) HTTP com Logout no PHP
Venho aqui para mostrar como fazer sistema de autenticação por HTTP, que é um dos sistemas mais seguros que existem, se for bem usado.
Bom.. A sintaxe é esta:
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Autenticação"');
header('HTTP/1.0 401 Unauthorized');
echo 'Se cancelar';
exit;
} else {}
Lendo o código..
Se não estiver valor na variavel $_SERVER['PHP_AUTH_USER']
mude o header para autenticação por www, motivo autenticação, e se não for autenticado mudar o header para não autorizado.
Se o usuario cancelar, irá aparecer o echo, o que estiver dentro dele, e finalmente o exit; para terminar o comando.
então, no “else { }” vai ter todo o comando que nós vamos precisar.
No meu script, eu fiz meio que uma gambiarra, mas funciona bem
’
$usuario = $_SERVER['PHP_AUTH_USER'];
$senha = $_SERVER['PHP_AUTH_PW'];
$usuarios['teste1'] = "teste1";
$usuarios['teste2'] = "teste2";
if(isset($usuarios[$usuario])) {
if($senha == $usuarios[$usuario]) {
$mostrasite = 1;
} else {
$mostrasite = 0;
}
} else {
$mostrasite = 0;
}
if(isset($_GET['logout'])) {
header("Location: http://logout:logout@seusite.com/index.php");
exit;
}
if($mostrasite == 1) {
Bom, vamos la, quebrei bem a cabeça pra escrever essas poucas linhas, não encontrava uma logica para isso, até que me veio uma ideia de ter uma variavel guardando o valor 0 ou 1, 0 para false[não exibir o site] e 1 para true[exibir o site].
$_SERVER['PHP_AUTH_USER']; é a variável que vai armazenar o usuario que voce digitar na janela que aparece.
$_SERVER['PHP_AUTH_PW']; é a variável que armazena a senha que voce digitar na janela que aparece.
Criei uma variavel array para nós podermos incluir os usuarios e senha,
Neste caso está: $usuarios['nomedousuario'] = “senhadousuario”;
Tenho dois usuarios criados para teste.
Vamos ler o que o código vai tentar fazer!
Se a variavel $usuarios[$usuario] estiver setada, ou seja, ele vai pegar o que voce digitar no usuario e colocar como se fosse um array, exemplo $usuarios['nomequevoceidigitoula'], se esse nome ja estiver setado com uma senha como no teste1 e teste2, ele vai continuar, e dai vai chegar se a senha, é igual a senha setada no array. Se for, temos usuario e senha confirmados, então, setamos na variavel $mostrasite o valor 1. se a senha for diferente setamos o valor 0, mesmo caso para o else do isset, seta o mostrasite pra 0!
Ok, login feito, e agora, como vamos fazer o logout? SIMPLES!
Vamos pegar uma query string qualquer, e quando ela for acionada, o header vai tentar logar com um usuario invalido, assim, voce se desloga do sistema, queira ou não, esta é a unica forma de deslogar por HTTP AUTH
’
Então, o codigo está. Se estiver setada $_GET['logout'] , ele muda o header para o login logout e a senha logout para seusite.com/index.php.
O exit só termina a instrução.
Para deslogar, voce só precisará fazer: “seusite.com/index.php?logout=” pronto, voce esta deslogado!
Agora, vamos fazer o código exibir o site ou não.
Veja, tem um if no final, querendo dizer, Se a variavel mostrasite for igual a 1, ele vai mostrar todo o site
Perai, sei que você se confundiu, mas é simples.
Você vai por:
if($mostrasite == 1) {
(fecha a tag PHP)
Aqui vem todo o seu site, html e etc.
No final do codigo voce vai por:
} else {
header('WWW-Authenticate: Basic realm="Autenticação');
header('HTTP/1.0 401 Unauthorized');
exit;
}
Você deve estar se perguntando, mas para que o else?
A resposta é simples, e se a pessoa colocar login ou senha errada, a variavel mostrasite vai ser 0, mas pra onde o site vai?
No codigo, faz ele voltar para autenticação!
Assim, está terminado o nosso script de autenticação,
espero que você tenha gostado, e se for copiar, por favor creditos ou pelomenos um trackback
’
Abraço, até o próximo =)






