<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/features.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'features.http-auth.php',
    1 => 'Autentica&ccedil;&atilde;o HTTP com PHP',
    2 => 'Autentica&ccedil;&atilde;o HTTP com PHP',
  ),
  'up' => 
  array (
    0 => 'features.php',
    1 => 'Caracter&iacute;sticas',
  ),
  'prev' => 
  array (
    0 => 'features.php',
    1 => 'Caracter&iacute;sticas',
  ),
  'next' => 
  array (
    0 => 'features.cookies.php',
    1 => 'Cookies',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'features/http-auth.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="features.http-auth" class="chapter">
  <h1 class="title">Autenticação HTTP com PHP</h1>


  <p class="simpara">
   Pode-se utilizar a função
   <span class="function"><a href="function.header.php" class="function">header()</a></span> para enviar uma mensagem de <code class="literal">&quot;Authentication Required&quot;</code>
   para o navegador cliente, causando o aparecimento de uma janela para a entrada de Nome de Usuário/Senha.
   Uma vez que o usuário preencha um nome de usuário e uma senha,
   a URL contendo o script PHP será chamada mais uma vez com as
   <a href="reserved.variables.php" class="link">variáveis predefinidas</a>
   <var class="varname">PHP_AUTH_USER</var>, <var class="varname">PHP_AUTH_PW</var>,
   e <var class="varname">AUTH_TYPE</var> para determinar o nome de usuário, senha e
   tipo da autenticação, respectivamente. Estas variáveis predefinidas são encontradas
   no array <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER</a></var>. <em>Somente</em>
   o método de autenticação &quot;Basic&quot; é suportado. Consulte a função
   <span class="function"><a href="function.header.php" class="function">header()</a></span> para mais informações.
  </p>

  <p class="para">
   Um exemplo de fragmento de script que forçaria a autenticação
   do cliente em uma página:
  </p>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemplo #1 Exemplo de Autenticação HTTP &quot;Basic&quot;</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">if (!isset(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_AUTH_USER'</span><span style="color: #007700">])) {<br />    </span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'HTTP/1.1 401 Unauthorized'</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'WWW-Authenticate: Basic realm="My Realm"'</span><span style="color: #007700">);<br />    echo </span><span style="color: #DD0000">'Texto enviado caso o usuário clique no botão Cancelar'</span><span style="color: #007700">;<br />    exit;<br />} else {<br />    echo </span><span style="color: #DD0000">"&lt;p&gt;Olá, </span><span style="color: #007700">{</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_AUTH_USER'</span><span style="color: #007700">]}</span><span style="color: #DD0000">.&lt;/p&gt;"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"&lt;p&gt;Você digitou </span><span style="color: #007700">{</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_AUTH_PW'</span><span style="color: #007700">]}</span><span style="color: #DD0000"> como sua senha.&lt;/p&gt;"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <strong>Compatibilidade</strong><br />
   <p class="para">
    Por favor, seja cauteloso ao codificar as linhas do cabeçalho HTTP. Para garantir máxima
    compatibilidade com todos os clientes, a palavra-chave &quot;Basic&quot; deve ser escrita com um
    &quot;B&quot; maiúsculo, a string realm deve ser envolvida por aspas duplas (nunca por aspas simples),
    e apenas um espaço deve preceder o código <em>401</em> na linha do cabeçalho
    <em>HTTP/1.1 401</em>. Parâmetros de autenticação precisam ser separados por
    vírgula.
   </p>
  </p></blockquote>

  <p class="para">
   Ao invés de simplesmente exibir <var class="varname">PHP_AUTH_USER</var>
   e <var class="varname">PHP_AUTH_PW</var>, como no exemplo acima,
   talvez queira verificar a validade do nome de usuário e senha.
   Talvez enviando uma consulta a um banco de dados, ou procurando
   o usuário em um arquivo dbm.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <strong>Configuração do Apache</strong><br />
   <p class="para">
    O PHP usa uma diretiva chamada <code class="literal">AuthType</code>
    para determinar se a autenticação externa está em efeito.
   </p>
  </p></blockquote>

  <p class="simpara">
   Perceba, entretanto, que a diretiva citada acima não previne que alguém que
   controle uma URL não autenticada roube senhas de
   URLs autenticadas no mesmo servidor.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <strong>Comportamento do navegador</strong><br />
   <span class="simpara">
    A autenticação básica HTTP é realmente básica e não foi projetada para suportar
    logouts. Como o HTTP é um protocolo sem estado, a maioria dos navegadores armazena em cache as
    credenciais fornecidas assim que um código de status <code class="literal">2xx</code> é detectado,
    e as envia em todas as requisições, até que o navegador seja fechado. Não há
    uma maneira definida para um servidor solicitar uma nova solicitação de credenciais.

    Ao longo dos anos, várias soluções alternativas para isso se espalharam como conselhos na internet,
    mas todas dependem de como diferentes navegadores optaram por lidar com casos extremos indefinidos
    (ou mesmo violações do padrão HTTP). É melhor evitar essas
    soluções alternativas e não usar a autenticação básica para nada sério.
   </span>
  </p></blockquote>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <strong>Configuração do IIS</strong><br />
   <span class="simpara">
    Para que a autenticação HTTP funcione no servidor IIS com a versão CGI do
    PHP, a diretiva php.ini <a href="ini.core.php#ini.cgi.rfc2616-headers" class="link">cgi.rfc2616_headers</a>
    deve ser definida como <code class="literal">0</code> (o valor padrão) e a configuração do IIS
    em &quot;<code class="literal">Directory Security</code>&quot; (ou &quot;Segurança do Diretório&quot; / &quot;Autenticação&quot;) deve ser editada.
    Clique em &quot;<code class="literal">Edit</code>&quot; (ou &quot;Editar&quot;) e marque apenas &quot;<code class="literal">Anonymous Access</code>&quot; (ou &quot;Acesso Anônimo&quot;),
    deixando todos os outros campos desmarcados.
   </span>
  </p></blockquote>

 </div>
<?php manual_footer($setup); ?>