Moin!
Ich verstehe nicht wirklich was es für einen Sinn macht sowas kompexes wie die HTTP-Authentifzierung zu entwickeln, und dann so eine simple Kleinigkeit wie das ausloggen nicht wirklich zu implementieren, denn ein Logout ist ein wichtiges Sicherheitsmerkmal wenn es um Authentifzierung geht. Deswegen wird HTTP-Auth auch so selten eingesetzt(gegenüber HTML-Formularen + Sessions zu Authentifzierung).
Die Antwort liegt schlicht im HTTP-Protokoll begründet. Es gibt in HTTP kein vorher und kein nachher, kein Login, sondern nur unabhängige Requests. Jede Ressource wird über eine neue Verbindung abgerufen, welche einen vollkommen anderen Weg nehmen kann, als alle Verbindungen vorher.
Im Gegensatz dazu haben Protokolle wie FTP, Telnet und SSH den entscheidenden Unterschied, dass hier _einmal_ eine Verbindung zum Server hergestellt und dann dauerhaft benutzt wird, solange bis sie wieder abgebaut wird (was dann der Logout ist).
Mit anderen Worten: Um unter HTTP irgendeine Art von Zugriffsschutz auf Ressourcen zu erhalten, hat man eben das getan, was protokollmäßig möglich ist (und auch bei z.B. Telnet getan wird): Jede neue Verbindung zum Server benötigt Username und Passwort, um Zugriff zu erlangen. Nur hat Telnet den Vorteil, dass die Verbindung üblicherweise solange hält, wie man möchte, während HTTP nach dem Zugriff die Verbindung sofort wieder unterbricht.
Ein neuer Zugriff würde deshalb eigentlich erneut die Eingabe der Benutzerdaten erfordern. Weil man dann aber aus dem Tippen nie mehr herauskommen würde, speichert der Browser diese Daten. Es kommt aber im eigentlichen Sinne nie zu einem Login, also kann es auch nicht zu einem Logout kommen.
Dein Ansatz, die ganze Geschichte mit dahintergesetzten Sessions zu lösen, nur damit du das Browser-Eingabefeld für die Benutzerdaten kriegst, anstatt das in einem Formular zu regeln und eine reine Session-Lösung zu benutzen, ist in meinen Augen absoluter Overkill und total unnütze Arbeit. Wenn die Anforderungen der Aufgabe Login und Logout vorsehen, dann kann man kein HTTP-Auth verwenden - ganz schlicht ausgedrückt. Zumal es ja nicht wirklich irgendwelche zusätzliche Sicherheit bringt, und auch keinerlei Verringerung des Aufwandes bewirkt. Du mußt ja trotzdem an jeder Stelle, wo Zugriffe erfolgen können, die Sessiondaten prüfen, um den Zugriff zu authentifizieren. Wenn du das nicht machst, ließen sich die Anmeldedaten weiterverwenden.
Im Prinzip benutzt du die HTTP-Auth-Dialoge der Browser nur als schlechten Ersatz für Formularfelder. Die dadurch entstehenden Probleme haben dich eine Wahnsinns-Zeit für Workarounds gekostet, mit im Prinzip Null Ergebnis. Und dem unguten Gefühl, dass weitere Browser dieser Welt sich möglicherweise noch ganz anders verhalten könnten und dann neue Schwierigkeiten auftreten würden.
HTTP-Authentifizierung ist ganz einfach - wenn man nicht versucht, Dinge damit zu machen, für die sie nie vorgesehen war. :)
- Sven Rautenberg
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|