Mailinglisten-Archive |
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