Benjamin Wilfing: HTTP Authentifikation

Hallo Forum,
da ihr immer so schnell helft, gleich noch etwas:

Folgender Programmcode:

// Authentifizieren
function authorize() {
 global $PHP_AUTH_USER;
 global $PHP_AUTH_PW;
 global $db;
 if(!isset($PHP_AUTH_USER)) {
  header("WWW-Authenticate: Basic realm="MyRealm"");
  header('HTTP/1.0 401 Unauthorized');
  return false;
  exit; }
 else {
  $sql_query = "SELECT * FROM users WHERE name='$PHP_AUTH_USER' AND password=PASSWORD('$PHP_AUTH_PW')";
  $sql_result = mysql_query($sql_query, $db);
  if (mysql_numrows($sql_result) == 0) {
   header("WWW-Authenticate: Basic realm="MyRealm"");
   header('HTTP/1.0 401 Unauthorized');
   return false;
   exit; }
  else {
   return true; }
 }
}

Nachdem man als registrierter User erkannt wurde, sind ja die beiden Variablen $PHP_AUTH_USER und $PHP_AUTH_PW gesetzt (d.h. es findet keine Passwortabfrage mehr statt, bis man alle Browserinstanzen geschlossen hat). Wie kann man diese beiden Variablen wieder leeren ?
Mit $PHP_AUTH_USER = ""; hab ich es versucht, aber das nützt nichts, beim nächsten Seitenaufruf sind die Variablen wieder gesetzt.
Geht das überhaupt oder muß man immer den Umweg gehen, die Browserfenster zu schließen, um sich sicher abzumelden ?

PS: Dieser Code ist gedacht für ein Intranet, bei dem ALLE User MSIE verwenden. Könnte ja sein, daß bei Netscape dieses Problem überhaupt nicht auftritt, aber das würde mir nicht helfen.

Danke im Voraus,

Benjamin :-)

  1. Hi Benjamin

    Hallo Forum,
    da ihr immer so schnell helft, gleich noch etwas:

    Nachdem man als registrierter User erkannt wurde, sind ja die beiden Variablen $PHP_AUTH_USER und $PHP_AUTH_PW gesetzt (d.h. es findet keine Passwortabfrage mehr statt, bis man alle Browserinstanzen geschlossen hat). Wie kann man diese beiden Variablen wieder leeren ?

    Ich bin noch nicht so bewandert mit den autentifizieruzngen, abner nachdem hier länger keiner geantwortet hat, werde ich es doch mal versuchen.

    Eine Möglichkeit ist, einen 401-Fehler an den Browser zu schicken, der bei Netscape und IE Passwort und Username löschen soll (obwohl nicht vom Authentifizierungsstandart vorgesehen).

    Eine gute Beschreibung der autentifizierungsmöglichkeiten mit PHP findest du unter http://www.php.net/manual/de/features.http-auth.php, dort beschreiben auch einige Leute ihre erfahrungen mit dem Ausloggen (was ich hier nur zitieren könnte).

    Hoffe, ich konnte dir helfen

    Danke im Voraus,

    Bitte, bitte

    Benjamin :-)

    Heizer

  2. Hallo Forum,
    da ihr immer so schnell helft, gleich noch etwas:

    Folgender Programmcode:

    // Authentifizieren
    function authorize() {
    global $PHP_AUTH_USER;
    global $PHP_AUTH_PW;
    global $db;
    if(!isset($PHP_AUTH_USER)) {
      header("WWW-Authenticate: Basic realm="MyRealm"");
      header('HTTP/1.0 401 Unauthorized');
      return false;
      exit; }
    else {
      $sql_query = "SELECT * FROM users WHERE name='$PHP_AUTH_USER' AND password=PASSWORD('$PHP_AUTH_PW')";
      $sql_result = mysql_query($sql_query, $db);
      if (mysql_numrows($sql_result) == 0) {
       header("WWW-Authenticate: Basic realm="MyRealm"");
       header('HTTP/1.0 401 Unauthorized');
       return false;
       exit; }
      else {
       return true; }
    }
    }

    Nachdem man als registrierter User erkannt wurde, sind ja die beiden Variablen $PHP_AUTH_USER und $PHP_AUTH_PW gesetzt (d.h. es findet keine Passwortabfrage mehr statt, bis man alle Browserinstanzen geschlossen hat). Wie kann man diese beiden Variablen wieder leeren ?
    Mit $PHP_AUTH_USER = ""; hab ich es versucht, aber das nützt nichts, beim nächsten Seitenaufruf sind die Variablen wieder gesetzt.
    Geht das überhaupt oder muß man immer den Umweg gehen, die Browserfenster zu schließen, um sich sicher abzumelden ?

    PS: Dieser Code ist gedacht für ein Intranet, bei dem ALLE User MSIE verwenden. Könnte ja sein, daß bei Netscape dieses Problem überhaupt nicht auftritt, aber das würde mir nicht helfen.

    Danke im Voraus,

    Benjamin :-)

    Spontan wür ich sagen:
    Du fragst nach ob die Variablen gestetzt sind!!
    mit ksadjfg=""; sind sie das natürlich!

    versuchs mal mit:
    unset($PHP_AUTH_USER);
    unset($PHP_AUTH_PW);

    Gruß