Wenn also deine PHP-Skripte im Browser nicht als Quellcode angezeigt werden, dann kann sie auch niemand sonst mittels HTTP auslesen. fopen("http:…") macht genau das Gleiche wie ein Webbrowser.
Genau das wollte ich wissen!
Wo, im Browser? Nein, das geht in der Tat nicht. Aber wie oft meldest du dich gleichzeitig bei demselben Dienst mit mehr als einem Benutzernamen an? Und was im Browser von deinem Nachbarn gespeichert ist, interessiert deinen Browser nicht.
Na ja, siehe das fiktive Szenario, mehrere Personen in einer WG oder in einem Betrieb am selben Rechner greifen auf dieselbe Site zu ...
Mittlerweile habe ich herausgefunden, ein Sitzungs-Cookie ist tatsächlich auch in der Browser-Terminologie ein Sitzungs-Cookie. Soll heißen: Werden alle Browserinstanzen geschlossen, wird auch der mittels PHP gesetzte Sitzungs-Cookie gelöscht. Firefox hat Sitzungs-Cookies nur im Speicher, legt ihn nicht irgendwo in einer Datei ab. Ich vermute, bei anderen Browsern wird das genauso sein.
Ob oder wie man mit session_set_cookie_params() und session_start() einen dauerhaften Cookie ablegen kann, muß ich erst noch schauen.
Den Server andererseits interessiert der Cookiename nicht, er benutzt ihn nur, um vom Browser den Cookieinhalt zu bekommen. Die einzelnen Sitzungen unterscheidet der Server anhand der Cookieinhalts.
»»
Was genau speichert PHP denn in dem Session-Cookie?
Daran hatte ich auch gedacht, mit header() weiterzuleiten. Ich dachte nur, es gäbe eine Alternative ohne Weiterleitung.
Du könntest versuchen, bereits mit der Ausgabe des Formulars ein Cookie zu setzen. Ist es beim Empfang der Formulardaten (=Loginversuch) nicht zu sehen (=hat der Benutzer Cookies abgeschaltet), könntest du nur die Fehlermeldung ausgeben, nicht das Formular. Setzt du noch einen Verweis dazu, der auf das Formular zeigt ("Hier erneut einloggen, sobald Cookies eingeschaltet"), stehen die Chancen IMHO recht gut, dass der Benutzer darüber das Formular wieder aufruft und somit seinen Keks verpasst bekommt.
So hatte ich das bisher gelöst. Das ergab aber ein neues Problem: Wenn die Sitzungsdauer abgelaufen ist, lösche ich manuell den Cookie und die Session, damit eine neue Session erzeugt werden kann. Es ginge zwar auch ohne Löschen der Sitzung, aber so halte ich es für sicherer, weil der User ansonsten nach einem erneuten Login die alte Sitzung übernehmen würde. Der User soll sich alos neu einloggen. Nach dem Absenden des Formulars ist aber kein Cookie vorhanden, obwohl Cookies eingeschaltet sind. Das Cookie wurde ja zuvor manuell gelöscht. Der User landet nach der Abfrage if ( isset($_POST['login']) && count($_COOKIE) == 0 ) $fehler_modus = "cookies_ausgeschaltet"; bei der Aufforderung, Cookies einzuschalten. Ist ein Teufelskreis ...
Man könnte höchstens das Hidden-Feld 'login' beim Timeout anders benennen. Dann könnte das Skript die Fälle unterscheiden. Muß ich mal versuchen, aber wer weiß, was daraus wieder für neue Probleme resultieren.