<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'features.http-auth.php',
    1 => 'Identificaci&oacute;n HTTP con PHP',
    2 => 'Identificaci&oacute;n HTTP con 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' => 'es',
    '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">Identificación HTTP con PHP</h1>


 <p class="simpara">
  Es posible utilizar la función <span class="function"><a href="function.header.php" class="function">header()</a></span> para solicitar
  una identificación (<code class="literal">&quot;Authentication Required&quot;</code>) al cliente,
  generando así la aparición de una ventana
  de solicitud de usuario y contraseña. Una vez que los
  campos han sido completados, la URL será llamada de nuevo, con las <a href="reserved.variables.php" class="link">variables predefinidas</a>
  <var class="varname">PHP_AUTH_USER</var>, <var class="varname">PHP_AUTH_PW</var> y
  <var class="varname">AUTH_TYPE</var> conteniendo respectivamente el nombre de usuario, la contraseña y
  el tipo de identificación. Estas variables predefinidas se encuentran en los arrays
  <var class="varname"><a href="reserved.variables.server.php" class="classname">$_SERVER</a></var>.
  <em>Solo</em> el método de identificación &quot;Basic&quot;
  es soportado. Consulte la función
  <span class="function"><a href="function.header.php" class="function">header()</a></span> para más información.
 </p>

 <p class="para">
  Aquí hay un ejemplo de script que fuerza la identificación del cliente
  para acceder a una página:
 </p>
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejemplo de identificación HTTP simple</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 utilizado si el visitante usa el botón de cancelación'</span><span style="color: #007700">;<br />    exit;<br />} else {<br />    echo </span><span style="color: #DD0000">"&lt;p&gt;Hola, </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;Su contraseña es </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">.&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>Compatibilidad</strong><br />
  <p class="para">
   Sea muy cuidadoso al usar encabezados HTTP con PHP. Para
   garantizar la máxima compatibilidad entre los navegadores, la palabra clave
   &quot;Basic&quot; debe escribirse con una B mayúscula, y el texto de presentación
   debe colocarse entre comillas dobles (no simples), y exactamente un espacio debe
   preceder al código <em>401</em> en el encabezado
   <em>HTTP/1.1 401</em>. Los parámetros de autenticación deben
   estar separados por comas.
  </p>
 </p></blockquote>

 <p class="para">
  En lugar de mostrar simplemente las variables globales <var class="varname">PHP_AUTH_USER</var>
  y <var class="varname">PHP_AUTH_PW</var>, se preferirá
  verificar la validez del nombre de usuario y la contraseña.
  Por ejemplo, enviando esta información a una base de datos,
  o buscando en un fichero dbm.
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <strong>Configuración de Apache</strong><br />
  <p class="para">
   PHP utiliza la presencia de la directiva <code class="literal">AuthType</code>
   para determinar si una identificación externa está activada.
  </p>
 </p></blockquote>

 <p class="simpara">
  Tenga en cuenta, sin embargo, que las manipulaciones anteriores no impiden
  que cualquier persona con una página no identificada
  robe las contraseñas de las páginas protegidas,
  en el mismo servidor.
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <strong>Comportamiento del navegador</strong><br />
  <span class="simpara">
   La autenticación HTTP Basic es realmente básica, y no fue diseñada para
   soportar cierres de sesión. Dado que HTTP es un protocolo sin estado, la mayoría
   de los navegadores almacenarán en caché las credenciales proporcionadas tan pronto como
   se reciba un código de estado <code class="literal">2xx</code>, y las enviarán en cada solicitud,
   hasta que se cierre el navegador. No existe una forma definida para que un servidor
   solicite nuevas credenciales.

   A lo largo de los años, varias soluciones alternativas se han difundido como consejos
   en Internet, pero todas dependen de cómo los diferentes navegadores han elegido
   manejar casos límite no definidos (o incluso violaciones del estándar HTTP).
   Es mejor evitar tales soluciones alternativas y no utilizar la autenticación Basic
   para nada serio.
  </span>
 </p></blockquote>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <strong>Configuración de IIS</strong><br />
  <span class="simpara">
   Para que la identificación HTTP funcione con un servidor IIS con
   la versión CGI de PHP, la directiva PHP
   <a href="ini.core.php#ini.cgi.rfc2616-headers" class="link">cgi.rfc2616_headers</a>
   debe establecerse en <code class="literal">0</code> (el valor por defecto),
   y debe editar la configuración &quot;<code class="literal">Directory Security</code>&quot;
   de IIS. Haga clic en &quot;<code class="literal">Edit</code>&quot; y active solo
   &quot;<code class="literal">Anonymous Access</code>&quot;, todos los demás campos deben
   dejarse inactivos.
  </span>
 </p></blockquote>

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