+5

Sistema de Login com HTTP AUTH

criado por João Heytor Kreitlow Pereira em 18/04/2002 6:02pm
Antes de tudo, vamos ao código que, vai colocar senha na página:

<?php
// Começo das Configurações
$nome = "PHPBrasil";
$senha = "123456";
// Fim das Configurações

if ($PHP_AUTH_USER !=$nome || $PHP_AUTH_PW !=$senha) {
    header("WWW-Authenticate: basic realm='Sistema de Autentificação'"); 
    header("HTTP/1.0 401 Unauthorized"); 
    echo "Nome de Usuário ou Senha Inválidos!\n"; 
    exit; 
} else {
?> 
<!-- Aqui vem a sua página -->

<!-- Fim da página -->
<?
}
?>

Agora, vamos as explicações...
Na primeira parte de código, declaramos duas váriaveis ($nome e $senha) que, vão servir de referência para o "programa".

Depois, fazemos um comando IF (Lembrando que, os caracteres || é a mesma coisa que OR, isto é, $PHP_AUTH_USER !=$nome || $PHP_AUTH_PW !=$senha, é a mesma coisa que $PHP_AUTH_USER !=$nome OR $PHP_AUTH_PW !=$senha) para verificar se, as várias estão vazias. Se estiver, ele imprime uma mensagem de erro, caso contrário, ele imprime a sua página.

Esse é um conceito simples (HTTP Authentication) que não precisa de cookies, session ou o que for, e muitas vezes é o suficiente para muitas aplicações. Espero que isso possa ajudar!

Comentários:

Mostrando 1 - 10 de 12 comentários
Nos código acima. Soh um usuário pode ser autenticado ou todos os usuários tem a mesma senha? Não entendi direito...
06/04/2007 3:56pm (~17 anos atrás)

José Walter disse:
Trabalho numa empresa que utiliza intranet. Todos os usuários logan em seu pc utilizando o usuário/senha do NT (da rede). Observei que existem alguns programas na linguagem DELPHI que reconhecem o usuário que está logado no equipamento (diga-se rede) e efetua o logon automaticamente. É possível com PHP identificarmos o usuário desta Rede? E, a partir daí, somente solicitar o nome de usuário/senha se o usuário logado na rede não estiver autorizado a entrar no referido sistema?
02/10/2006 2:38pm (~17 anos atrás)

Notice: Undefined variable: PHP_AUTH_USER in e:\easyphp1-8\www\php-experiencia\exp\ver.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at e:\easyphp1-8\www\php-experiencia\exp\ver.php:9) in e:\easyphp1-8\www\php-experiencia\exp\ver.php on line 17

Warning: Cannot modify header information - headers already sent by (output started at e:\easyphp1-8\www\php-experiencia\exp\ver.php:9) in e:\easyphp1-8\www\php-experiencia\exp\ver.php on line 18
Nome de Usuário ou Senha Inválidos!




me ta aparecendo isso tudo com o codigo igualzinhu do Heytor... alguem sabe me dizer q tou fazendo errado ?
21/09/2006 6:47am (~17 anos atrás)

Gente, estou tentando desenvolver um script utilizando a variável $PHP_AUTH_USER e MySQL. A idéia é buscar usuário e senha no BD. Esta parte já funciona, mas estou com um problema: Gostaria de permitir que o usuário apenas 3 tentativas de login, depois bloquear. Todavia ocorre um problema quando uso algo como $LoginAnterior = $PHP_AUTH_USER. Quando solicito um novo usuário, aparentemente, o conteúdo de $LoginAnterior é automaticamente ajustado. Alguém sabe se, neste caso, é atribuido o ponteiro à variável? Alguém tem uma proposta de solução?
18/02/2004 11:56am (~20 anos atrás)

if ($PHP_AUTH_USER !=$**** || $PHP_AUTH_PW !=$*****) {

é necessário a utilização dos nomes de variáveis corretamente.
25/11/2003 1:18pm (~20 anos atrás)

Caro Heytor,
Seu Artigo deu "asas a minha imaginação", aproveitei e integrei sua solução de autenticação com a solução de BD com arquivo TXT do Dionísio (http://www.phpbrasil.com/articles/article.php/id/129). Só que ainda estou tendo problemas... Como sua muuuito iniciante no PHP não estou conseguindo depurar o erro.
A idéia foi a seguinte:
* httpauth.htm - contém um <form> que envia as variáveis ($user, $pw, e $cod) para o httpauth.php
* No mesmo diretório, temos dois arquivos texto nome.txt (com o nome dos usuarios) e pw.txt (com a senha) - é interessante observar que a linha em que se encontra o nome e a senha, deverão ser as mesmas e é a essa linha a qual se refere a variável $cod
* O código da pagina httpauth.php ficou assim:
<?php
// Começo das Configurações
$arqnome = "nome.txt";
$fpnome = fopen($arqnome, "r");
$linhanome = file($arqnome);
$resultnome = $linhanome[$cod];

$arqpw = "pw.txt";
$fppw = fopen($arqpw, "r");
$linhapw = file($arqpw);
$resultpw = $linhapw[$cod];
// Fim das Configurações

if ($user !=$resultnome || $pw !=$resultpw) {
header("WWW-Authenticate: basic realm='Sistema de Autentificação'");
header("HTTP/1.0 401 Unauthorized");
echo "Nome de Usuário ou Senha Inválidos!\n";
exit;
} else {
?>

// PÁGINA A SER EXIBIDA (COD. HTML)

<?
}
?>
//fim do código da página httpauth.php

Bem, apesar dos valores estarem retornando direitinho, eu não estou conseguindo fazer a validação...
Onde eu estou errando?

[ ]'s Andre Rigueira
04/08/2003 2:25pm (~21 anos atrás)

funciona sim.
12/06/2002 4:53pm (~22 anos atrás)

É, isso exatamente acontece!! E, no IE, tb tem a opção de lembrar senha que, se vc deixar marcado, vai sempre estar com a senha, mesmo depois que vc fecahr o browser... Isso realmente acontece e, eu não sei como resolver... Por isso mesmo que, estou fazendo um artigo de Como fazer um Sistema de Login Utilizando cookies...
14/05/2002 7:30pm (~22 anos atrás)

Existe sim... Mas, é um pouco mais dificil...

1º Crie um arquivo com o nome .htaccess
Dentro dele, coloque isso:

AuthName Área Restrita - Acesso somente com password
AuthType Basic
AuthUserFile path/para/o/arquivo/.htpasswd
require valid-user

2º Crie um arquivo com o nome .htpasswd
Dentro dele, coloque:
nome:senha_criptografada

Ele vai funcionar do mesmo jeito que o script que fiz aqui em PHP...

27/04/2002 11:56am (~22 anos atrás)

Acho que sim, não sei nuna testei...
27/04/2002 11:51am (~22 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)