Question

Nous avons sur notre site un répertoire protégé dans lequel les utilisateurs doivent se connecter à l'aide du système .htacces.

Je sais que nous pouvons obtenir le nom d'utilisateur de la personne connectée via une variable PHP

  

$ username = $ _SERVER ['REMOTE_USER'];

Je me demande s’il est possible d’afficher TOUS les utilisateurs connectés?

De cette façon, nous pourrions afficher quelque chose en haut, comme & "Les utilisateurs suivants sont connectés: &";

De plus, quelqu'un pourrait-il clarifier le fonctionnement des sessions avec htaccess, une personne doit-elle seulement se reconnecter si elle ferme le navigateur ou si son délai d'attente expire? Merci

Était-ce utile?

La solution

.htaccess L’authentification de base n’est que cela - uniquement l’authentification. Aucune notion de session ne lui est associée. Par conséquent, le serveur n’a aucune idée du nombre de clients disposant des informations d’authentification en cours.

Tant qu'un navigateur dispose des détails de l'authentification, la session n'expire pas. Généralement, seul le redémarrage du navigateur entraînera un navigateur à "oublier" ses informations d'authentification.

Autres conseils

Il est vrai que BASIC Auth n’a pas de concept de session. Cependant, les sessions ne constituent pas le seul moyen d'authentifier les utilisateurs, ni de savoir combien d'utilisateurs sont connectés. En fait, HTTP est sans état, de même que les sessions HTTP. Vous ne pouvez deviner que le nombre de personnes connectées via le nombre de sessions actives récentes (modifiées récemment).

Vous pouvez implémenter l'authentification de base avec PHP. http://php.net/manual/en/features.http-auth. php

Vous pouvez deviner le nombre de personnes connectées en comptant simplement le nombre d'authentifications effectuées au cours des 5 dernières minutes, 10 dernières minutes, etc. Cela serait tout aussi précis que les sessions HTTP.

Par exemple:

Créez un fichier appelé basic-auth.php ou similaire. C'est l'exemple de base de PHP.net

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
} else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>

Vous pouvez ensuite exiger () ce fichier dans chaque fichier / répertoire que vous souhaitez protéger. Cependant, tous les téléchargements devront maintenant être validés par PHP. Supprimez votre authentification de base .htaccess. Depuis que vous aurez PHP le faire.

Maintenant, vous le modifiez pour autoriser les utilisateurs.

Une chose à noter est que BASIC Auth n’est qu’une spécification pour l’authentification HTTP. Il ne précise pas comment s'authentifier. Puisque vous utilisez Apache, votre authentification est spécifique à Apache. Vous devez avoir créé un fichier de mot de passe pour Apache, similaire à celui mentionné ici: http : //httpd.apache.org/docs/1.3/howto/auth.html#basicconfig

Apache utilise trois fonctions de hachage. Soit crypt, md5 ou sha1. Donc, si vous voulez utiliser le même fichier de mot de passe, vous devez savoir quel hachage vous utilisez.

Voici un exemple pour SHA1:

En gros, vous allez simplement parcourir chaque ligne du fichier de mots de passe, et si elle contient l’utilisateur, vérifiez si le mot de passe fourni correspond. Le fichier ressemble à quelque chose comme:

user1: passwordhash1 utilisateur2: passwordhash2

Qui est juste un utilisateur et leur mot de passe par ligne, séparés par & ";: &";

Voir ici pour savoir comment le hachage est généré: http://httpd.apache.org/docs/trunk/misc/password_encryptions. html

Votre code ressemblerait à ceci (non testé):

<?php

$authenticated = false;

// a user and password was supplied
if (isset($_SERVER['PHP_AUTH_USER'])) {
    $user = $_SERVER['PHP_AUTH_USER'];
    $pass = $_SERVER['PHP_AUTH_PW'];
    $hash = '{SHA}' . base64_encode(sha1($password, TRUE));

    $password_file = '/path/to/your/passwords/file';
    $lines = file($password_file);

    // find the user in the password file
    foreach($lines as $line) {
       list($_user, $_hash) = explode(":", $line);
       if ($_user == $user) {
          // if the hash matches, then their password was correct
          if ($hash == $_hash) {
             $authenticated = true;
          }
          break;
       }
    }
}

if (!$authenticated) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'You need to log in to access the downloads';
    exit;
}

// log file
$log_file = '/path/to/authentication/logs.log';

$lines = file($log_file);
$time = time();
$mins = 5; // last 5 mins

// write this user to log
$lines[] = $user.":".time();

// remove log entries older then $mins
// also count unique user entries
$unique_users = array();
foreach($lines as $i=>$line) {
   list($_user, $_time) = explode(":", $line);
   if ($time > $_time + 60*$mins) unset($lines[$i]);
   else $unique_users[$user] =  isset($unique_users[$user]) ? $unique_users[$user]+1 : 0;
}

// write log file to disk
file_put_contents($log_file, implode("\n", $lines));

// users online 
$users_online_count = count($unique_users);


?>

Bien sûr, vous pouvez implémenter n’importe quelle méthode d’authentification. Vous pouvez utiliser une base de données, écrire vos propres formats de fichiers, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top