2009-10-22 3 views
0

У нас есть защищенный каталог на нашем сайте, где пользователи должны войти в систему, используя систему .htacces.показать список зарегистрированных пользователей через htaccess

Я знаю, что мы можем получить имя пользователя, Thats авторизовались через переменную PHP

$ имя пользователя = $ _SERVER [ 'REMOTE_USER'];

Мне интересно, возможно ли показать ВСЕ пользователя, которые вошли в систему?

Таким образом, мы могли бы показать что-то на вершине, как «Следующие пользователи вошли в систему:»

Кроме того, может кто-то прояснить, как сеансы работы с Htaccess, делает человек только для повторного входа в систему, если они закрыть браузер, или он тайм-аут? Спасибо

ответ

1

.htaccess Базовая аутентификация - это только проверка подлинности. Концепция связанного с ней сеанса отсутствует, и, таким образом, в любой момент времени сервер не знает, сколько клиентов имеют текущие учетные данные.

Пока браузер имеет данные аутентификации, сеанс не будет тайм-аутом. Как правило, только перезапуск браузера приведет к тому, что браузер «забудет» данные аутентификации.

1

Это правда, что BASIC Auth не имеет понятия сеансов. Тем не менее, сеансы - это не единственный способ аутентификации пользователей или отслеживать, сколько пользователей вошли в систему. Фактически, HTTP является апатридом, а также сеансами HTTP. Вы можете только догадываться, сколько из них зарегистрировано через число последних активных (измененных недавно) сеансов.

Вы можете реализовать BASIC Auth с PHP. http://php.net/manual/en/features.http-auth.php

Вы можете догадаться, сколько из них зарегистрировано, просто подсчитав количество подтверждений за последние 5 минут или 10 минут и т. Д. Это будет точно так же, как и HTTP-сеансы.

Например:

Создайте файл с именем базового auth.php или аналогичный. Это базовый пример из 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>"; 
} 
?> 

Вы можете потребовать() этот файл из любого файла/каталога вы хотите защитить. Тем не менее, все загрузки должны быть проверены PHP теперь. Удалите базовую аутентификацию .htaccess. Поскольку у вас будет PHP, сделайте это.

Теперь вы можете отредактировать его, чтобы авторизовать пользователей.

Следует отметить, что BASIC Auth является лишь спецификацией для проверки подлинности HTTP. Он не указывает, как аутентифицироваться. Поскольку вы используете Apache, то, как вы аутентифицируетесь, зависит от Apache. Вы должны были создать файл паролей для Apache, как описано здесь: http://httpd.apache.org/docs/1.3/howto/auth.html#basicconfig

Apache использует три функции хэширования. Или crypt, md5 или sha1. Поэтому, если вы хотите использовать один и тот же файл паролей, вам нужно знать, какой хэш вы используете.

Вот пример для SHA1:

В основном вы будете просто пройти через каждую строку файла паролей, и если у него есть пользователь, проверьте прилагаемый пароль совпадает. Файл выглядит примерно так:

user1: passwordhash1 user2: passwordhash2

который является только один пользователь, и их хэш пароля в строке, разделенные ":".

Смотрите здесь, как генерируется хэш: http://httpd.apache.org/docs/trunk/misc/password_encryptions.html

Ваш код будет что-то вроде этого (непроверенные):

<?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); 


?> 

Конечно, вы можете реализовать любой метод аутентификации. Вы можете использовать базу данных или написать свои собственные форматы файлов и т. Д.

Смежные вопросы