phpbar.de logo

Mailinglisten-Archive

[php] Kennwortschutz mit Timeout

[php] Kennwortschutz mit Timeout

Klaus Nordmann k.nordmann_(at)_bbdo-interactive.de
Thu, 13 Apr 2000 19:17:22 +0200


Hi,

ich arbeite an einem System, in dem PHP den Kennwortschutz als basic-realm
mit Header() erzeugt.
Jeder angemeldete User hat einen Eintrag in einer Datenbank, wo in einem
Feld der Zeitpunkt der letzten Anmeldung festgehalten wird.
Dieses Feld wird mit jeder Aktion, die der User tätigt, aktualisiert.
Ist seit diesem Zeitpunkt eine bestimmte Zeit vergangen, sorgt ein Script
dafür, dass der User sich neu anmelden muss.

Das funktioniert so auch hervorragend, außer in einem Fall:

Wenn der User den Browser öffnet und auf das System geht, also bei der
ersten Anmeldung in einer Session, hat der Browser die
Authentifizierungsdaten natürlich noch nicht.
Er kommt also auf die Site, das System bekommt keinen PHP_AUTH_USER und
kein PHP_AUTH_PW und fordert zur Anmeldung auf.
Jetzt gibt der User seine Daten ein, klickt auf ok und das System bekommt
nun seine Anmeldung.
Es stellt fest, dass der Timeout abgelaufen ist und fordert den User
abermals zur Authentifizierung auf.
Erst danach kommt er hinein.

So sieht es aus:

<?php
  $Rights = "";
  if (!empty($PHP_AUTH_USER) && !empty($PHP_AUTH_PW))
  {
    $q = "SELECT id, timeout FROM bearbeiter WHERE login =
\"$PHP_AUTH_USER\" AND pwd = \"$PHP_AUTH_PW\" AND status = 1";
    $r = mysql_query($q);
    if (mysql_num_rows($r) == 1)
    {
      $z = mysql_fetch_array($r);
      $uid      = $z[0];      $uto      = $z[1];      $dif      = $uto -
time();
      $akt_tim  = time();
      if ($uto > $akt_tim)
      {
        $q = "SELECT DISTINCT r.recht FROM rechte=r, bearbeiterrechte=br
WHERE br.bearbid=$z[0] AND br.rechtid=r.id ORDER BY r.txt";
        $r = _(at)_mysql_query($q);
        if (!mysql_errno())
        {
          for ($i = 0; $i < _(at)_mysql_num_rows($r); $i++)
          {
            $zr = _(at)_mysql_fetch_object($r);
            if (!mysql_errno()) $Rights .= "[$zr->recht]";
          }
        }
      }
      $new_tim = time() + $BearbeiterTimeout;
      _(at)_mysql_query("UPDATE bearbeiter SET timeout = $new_tim WHERE id =
$uid");
      _(at)_mysql_free_result($zr);
    }
    _(at)_mysql_free_result($r);
  }

  if (empty($Rights))
  {
    _(at)_Header("WWW-Authenticate: Basic realm=\"$CompanyName - CMS\"");
    _(at)_Header("HTTP/1.0 401 Unauthorized");
    include getenv(DOCUMENT_ROOT)."/cms/401.html";    exit;
  }
?>

Wie kann man es machen, damit man sich beim ersten mal in einer Session
nicht neu anmelden muss?


mfg
Klaus



php::bar PHP Wiki   -   Listenarchive