phpbar.de logo

Mailinglisten-Archive

Re: [php] & Userbereich mit Login, Passwort
Archiv Mailingliste php_(at)_infosoc.uni-koeln.de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [php] & Userbereich mit Login, Passwort



Bernhard Ostheimer <Bernhard.Ostheimer_(at)_Uni-Mainz.de> schrieb,

> Da mit dem Login auch MySQL-Befehle "verkünpft" sind (bestimmter
User soll nur bestimmte
> Datensätze erhalten) kommt wohl eine Authentifizierung mittels
.htaccess-Datei
> nicht in Frage.

Doch. Wenn Dein Apache das Modul mod_auth_mysql verwendet, kannst Du
auch per .htaccess den Zugang über eine MySQL-DB realisieren. Das ist
die einfachste Lösung, bei der das Apache Modul dafür sorgt, daß nur
Benutzer mit Account bzw. bestimmter Gruppenzugehörigkeit auf einzelne
Dateien oder Verzeichnisse zugreifen können und Dein PHP-Script dann
für die Feinanpassung an diesen User sorgt.

Ich schreibe häufig Anwendungen, bei denen auch anonyme Benutzer auf
die Seiten zugreifen können sollen, aber angemeldete Benutzer
besondere Möglichkeiten haben. Das geht dann nicht mehr per .htaccess.
In diesem Fall läuft die gesamte Autentifizierung über PHP. Der
Benutzer kann sich z.B. per login.php anmelden, was in etwa so
aussehen könnte:

if (!$PHP_AUTH_USER) {
  Header("WWW-authenticate: basic realm=\"server\"");
  Header("HTTP/1.0 401 Unauthorized");
  Header("Location: /member");
  exit;
} else {
  $username=strtolower($PHP_AUTH_USER);
  $password=$PHP_AUTH_PW;
  $userdata=mysql("user","select * from wwwuser where
username='$username' and password='$password'");
  $u=mysql_fetch_array($userdata);
  mysql_free_result($userdata);
  if (!$u) {
    Header("WWW-authenticate: basic realm=\"server\"");
    Header("HTTP/1.0 401 Unauthorized");
    Header("Location: /member");
    exit;
  }
}

Wenn der Benutzer sich angemeldet hat, schickt sein Browser bei jedem
weiteren Seitenzugriff Benutzername und Passwort mit (Basic
Authentication eben), die Dir in den Variablen $PHP_AUTH_USER und
$PHP_AUTH_PW zur Verfügung stehen, um die Webseiten entsprechend
anzupassen. Ich lese damit am Anfag jeder Seite erstmal die
Benutzerdatenbank aus und erzeuge mir ein Array mit dem
Benutzereigenschaften:

if ($PHP_AUTH_USER) {
 $user=strtolower($PHP_AUTH_USER);
 $password=$PHP_AUTH_PW;
 $result=mysql("user","select * from user u, usergroup v where
username='$user' and password='$password' and u.userid=v.userid order
by groupid");
 $u=mysql_fetch_array($result);
 $u['groups']=",0";
 while ($x=mysql_fetch_array($result)) {
  $u['groups'].=",".$x['groupid'];
 }
 $u['groups'].=",";
 $uid=$u['userid'];
 mysql_free_result($result);
} else {
 $uid=0;
}

Gruß, Reiner



Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive