Services webmasters
Partenaires
Jeux concours gratuits
 
Manuel PHP
<<<
Identification HTTP avec PHP Cookies
>>>

6 Caractéristiques
 Manuel PHP

->Identification HTTP avec PHP
Cookies
Gestion des chargements de fichier
Utilisation des fichiers à distance
Gestion des connexions
Connexions persistantes aux bases de données
Safe mode
Utiliser PHP en ligne de commande

6.1 Identification HTTP avec PHP

Les fonctions d'identification HTTP de PHP ne sont disponibles que si PHP est exécuté comme module Apache, et non pas sous la forme d'un CGI. Sous cette forme, il est possible d'utiliser la fonction header pour demander une identification ( "Authentication Required" ) au client, générant ainsi l'apparition d'une fenêtre de demande d'utilisateur et de mot de passe. Une fois que les champs ont été remplis, l'URL sera de nouveau appelée, avec les variables $PHP_AUTH_USER , $PHP_AUTH_PW et $PHP_AUTH_TYPE contenant respectivement le nom d'utilisateur, le mot de passe et le type d'identification. Actuellement, seule l'identification simple ("Basic") est supportée. Reportez-vous à la fonction header pour plus d'informations.

Note
Note sur les versions de PHP

Les auto-globales , telles que $_SERVER , ont été ajoutée en PHP à partir de la version 4.1.0 . $HTTP_SERVER_VARS est disponible depuis PHP 3.

Voici un exemple de script qui force l'identification du client pour accéder à une page :
Exemple d'identification HTTP

<?php
  
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    
header('WWW-Authenticate: Basic realm="My Realm"');
    
header('HTTP/1.0 401 Unauthorized');
    echo
'Texte utilisé si le visiteur utilise le bouton d\'annulation';
    exit;
  } else {
    echo
"<p>Bonjour, {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo
"<p>Votre mot de passe est {$_SERVER['PHP_AUTH_PW']}.</p>";
  }
?>

Note
Note de compatibilité

Soyez bien prudent lorsque vous utilisez des entêtes HTTP avec PHP . Afin de garantir un maximum de compatibilité entre les navigateurs, le mot clé "Basic" doit être écrit avec un B majuscule, et le texte de présentation doit être placé entre guillemets simples, et exactement un espace doit précéder le code 401 dans l'entête HTTP/1.0 401 .

Au lieu d'afficher simplement les variables globales $PHP_AUTH_USER et $PHP_AUTH_PW , vous préférerez sûrement vérifier la validité du nom d'utilisateur et du mot de passe. Par exemple, en envoyant ces informations à une base de données, ou en recherchant dans un fichier dbm.

Méfiez-vous des navigateurs buggés, tels que Internet Explorer. Ils semblent très susceptibles concernant l'ordre des en-têtes. Envoyer l'en-tête d'identification ( WWW-Authenticate ) avant le code de HTTP/1.0 401 semble lui convenir jusqu'à présent.

Pour éviter que quelqu'un écrive un script qui révèle les mots de passe d'une page, à la quelle on a accédé par une identification traditionnelle, les variables globales PHP_AUTH ne seront pas assignées si l'identification externe a été activée pour cette page. Dans ce cas, la variable REMOTE_USER peut être utilisée pour identifier l'utilisateur à l'extérieur. De même que $_SERVER['REMOTE_USER'] .

Note
Note de configuration

PHP utilise la présence de la directive AuthType pour déterminer si une identification externe est activé. évitez donc cette directive de contexte si vous voulez utiliser l'identification de PHP (sinon, les deux identifications se contrediront, et échoueront).

Notez cependant que les manipulations ci-dessus n'empêchent pas quiconque possède une page non authentifiée de voler les mots de passe des pages protégées, sur le même serveur.

Netscape et Internet Explorer effaceront le cache d'identification client s'ils reçoivent une réponse 401. Cela permet de déconnecter un utilisateur, pour le forcer à saisir à nouveau son nom de compte et son mot de passe. Certains programmeurs l'utilisent pour donner un délai d'expiration, ou alors, fournissent un bouton de déconnexion.

Identification HTTP avec nom d'utilisateur/mot de passe forcé

<?php
  
function authenticate() {
    
header('WWW-Authenticate: Basic realm="Test Authentication System"');
    
header('HTTP/1.0 401 Unauthorized');
    echo
"Vous devez entrer un identifiant et un mot de passe valide pour accéder
    à cette ressource.\n"
;
    exit;
  }

  if ( !isset(
$_SERVER['PHP_AUTH_USER']) ||
       (
$_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
   
authenticate();
  }
  else {
   echo
"<p>Welcome: {$_SERVER['PHP_AUTH_USER']}<br>";
   echo
"Old: {$_REQUEST['OldAuth']}";
   echo
"<form action='{$_SERVER['PHP_SELF']}' METHOD='POST'>\n";
   echo
"<input type='hidden' name='SeenBefore' value='1'>\n";
   echo
"<input type='hidden' name='OldAuth' value='{$_SERVER['PHP_AUTH_USER']}'>\n";
   echo
"<input type='submit' value='Re Authenticate'>\n";
   echo
"</form></p>\n";
  }
?>

Ce comportement n'est pas nécessaire par le standard d'identification HTTP Basic . Les tests avec Lynx ont montré qu'il n'affectait pas les informations de session lors de la réception d'un message de type 401. Ce qui fait que presser la touche "retour" ( back ) à un client Lynx précédemment identifié donnera l'accès direct à la ressource. Cependant, l'utilisateur peut utiliser la touche '_' pour détruire les anciennes identifications.

Notez aussi que tout ceci ne fonctionne pas sous Microsoft IIS et que les limitations de PHP en version CGI sont dues aux limitations de IIS.

Note

Si le safe mode est activé, l'UID du script est ajouté automatiquement dans l'entête realm , comme faisant partie de l'entête WWW-Authenticate .

<< Identification HTTP avec PHP >>
Manuel PHP Caractéristiques Cookies
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -