Tom: Sessioncookies

Beitrag lesen

Hello,

Wie realisiert man ein LoginSystem ohne session, für user, die session abgestellt haben?
Und wie speichert man usereinstellungen langfristig ohne cookie?

Die Frage ist falsch, da kann man dann auch keine richtige Antwort drauf geben.
Ich versuch mal, es geradezurücken:

Die User haben an ihrem Client nicht "Session" abgestellt, sondern nehmen keine Cookies an, obwohl das heutzutage vollkommen ok ist, mit Ausnehme des Trackings natürlich. Aber dafür bieten die Browser an, nur von bestimmten Domains Cookies anzunehmen.

Ohne Session kann man kein "Login" bauen. Irgendwie müssen die Daten auf dem Server dem Client zugeordnet werden können. Man kann allerdings die Daten immer zwischen Server und Client hin und herschicken. Dann kann der Client (meistens) daran beliebig manipulieren. Man muss also bei jedem Request alle Stufen der Prüfung wieder neu machen.

Man kann eine Session mit geschenküblichen Browsern aber nicht nur auf Cookies aufbauen, sondern auch auf Paramtern in der URi (mMn untauglich und tunlichst zu unterlassen) oder auf den AUTH-Kriterien für das klassische Basic-Auth-Verfahren.

Das haben die wenigsten Clients ausgeschaltet.
Das funktioniert ganz erstklassig, ist nur ein wenig komplizierter in der Umsetzung mit PHP, weil immer noch ein paar praktische Funktionen fehlen in PHP und man sich die Session-Datei daher selber bauen muss. Die ist dann leider im Speicherformat nicht kompatibel mit der automatisch erzeugten Sessiondatei von PHP.

Mit ein wenig Tricksen kann man den PHP-eigenen Sessionmechanismus allerdings auch an das Basic-Auth ankoppeln.

Schau Dir mal an, was passiert, wenn Du beim session_start($session_id) eine ID übergibst.

http://www.php.net/manual/en/function.session-start.php

Dann musst Du dir diese Session-ID nur merken für den User-Account. Das machst Du am besten in einer DB. An die DB lässt Du den User nur heran, wenn er sich mittels

<?php
  if(!isset($_SERVER["PHP_AUTH_USER"]) or !isset($_SERVER["PHP_AUTH_PW"]))
  {
    Header("WWW-Authenticate: Basic realm="My Realm"");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Text, der gesendet wird, wenn der Benutzer abbricht.<br />".
         "Das sollte eine vollst&auml;ndige HTML Seite sein.\n<br>";
    exit;
  }
  else
  {
    echo "Hello ".$_SERVER["PHP_AUTH_USER"]."<P>";
    echo "Du hast <b>".$_SERVER["PHP_AUTH_PW"]."</b> als Passwort eingegeben.<P>";
  }
?>

authentifiziert hat.

Das funktioniert aber nur dann auf diese Weise, wenn PHP im Apachen als Modul läuft.

Harzliche Grüße vom Berg
http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau