Konzept eines Session
Kalle
- php
Hallöle,
setze erstmalig ein Session ein (THE = DAS Session?), klappt auch soweit ...
Doch mein schlaues Buch "PHP after work" verliert sich in Einzelheiten, habe viel rumprobieren müssen, weil das Konzept nicht richtig erklärt wird.
Ich habe verstanden:
session_start() fragt ein Cookie (DAS Cookie?) ab. Wenn das fehlt, wird es angelegt. Inhalt unklar. Bei Ende des PHP- Scripts wird das Cookie nochmals geschrieben.
Wenn ein Cookie vom letzten Zugriff auf die Seite vorhanden, könnte das uralt sein (falls der Browser ständig geladen war) und irgendwoher werden die alten Session- Variablen hergezaubert. Sind die im Cookie enthalten? Oder jahrelang auf dem Server?
Ich hinterlege als Session- Variable vorsichtshalber mal die Startzeit. Irgendwo nach 1, 2 Stunden sollte die Zugriffsberechtigung enden.
Andererseits sollte sich der Benutzer auch bewußt abmelden können. Wie geht das? Mit session_unset() ?
Liebe Grüße, Kalle
s.h.
http://de2.php.net/manual/de/function.session-destroy.php
Hello,
PHP untestützt die Session-Verwaltung ab Version 4.irgendwas ganz automatisch.
Wenn die php.ini die passenden Einstellungen enthält, werden automatisch Cookies verwendet.
Die Cookies werden von PHP automatisch so aufgebaut, dass si i.d.R. vom Browser nicht auf der Festplatte gespeichert werden, sondern nur im Speicher gehalten werden, solange Fenster zur entsprechenden Domain/Pfad und tiefer geöffnet sind.
Die Cookies kommen dann in $_COOKIE wieder an, wenn der Client sie annimmt und wieder mitsendet.
Um schnell Überblick zu bekeommen:
Im Browser die Annahme von Cookies von einer Rückfrage abhängig machen. Dann kann man sich
den Cookie oder das Kekschen oder die (Kaffee-)Beigabe auch ansehen, sogar im IE *gg*
Im Script als oberstes 'error_reporting(E_ALL);' schreiben, damit alle Warnungen
angezeigt werden
Der name des Cookies wir mit " $alterName = session_name($neuerName); " festgelegt und ist in der PHP-ini nprmalerweiose auf "PHPSESSID" eingestellt. Das würde ich ändern.
Probier das erstmal aus.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
setze erstmalig ein Session ein (THE = DAS Session?), klappt auch soweit ...
Im Englischen gibt es kein der-die-das, der Rückschluss the = das ist von daher unpassend. Aus der deutschen Sprachmelodie heraus ergibt sich recht eindeutig für Session "die Session", ähnlich "die Sezession", "die Prozession", "die Absolution", etc. Man könnte natürlich auch einfach von einer Sitzung sprechen.
session_start() fragt ein Cookie (DAS Cookie?) ab.
Eher der Cookie.
Wenn das fehlt, wird es angelegt. Inhalt unklar. Bei Ende des PHP- Scripts wird das Cookie nochmals geschrieben.
Nein, Cookies können nur einmal pro Skriptdurchlauf, also pro Seitenabruf geschrieben werden, und genau genommen auch nur sehr weit vorne im Skript, weil diese Parameter im HTTP-Protokoll vor den eigentlichen Nutzdaten (sprich: Seiteninhalt) gesendet werden müssen.
Wenn ein Cookie vom letzten Zugriff auf die Seite vorhanden, könnte das uralt sein (falls der Browser ständig geladen war)
Falls der Browser ständig geladen war und der Cookie kein Ablaufdatum hatte. Es gibt Cookies mit Ablaufdatum und solche ohne, die stattdessen mit dem Schließen des Browsers gelöscht werden.
und irgendwoher werden die alten Session- Variablen hergezaubert. Sind die im Cookie enthalten? Oder jahrelang auf dem Server?
Sessions bestehen aus zwei Teilen, den Daten und einer Kennung für die Session, der Session-ID. Die Daten werden auf dem Server zusammen mit einer eindeutigen Kennung gespeichert. Die Kennung wird im Browser per Cookie gespeichert und dient dem Server dazu, beim nächsten Aufruf wieder den richtigen Datensatz rauszusuchen.
Das hat die Vorteile, dass a) nicht bei jeder Anfrage an den Server (bei jeder, auch für Bilder und anderes, Cookies kennen keinen Unterschied zwischen Skripten, Bildern, usw) die gesamten Daten vom Browser an den Server geschickt werden müssen und b) die Daten vor Einsicht und Manipulation durch den Browserbenutzer geschützt sind.
Ich hinterlege als Session- Variable vorsichtshalber mal die Startzeit. Irgendwo nach 1, 2 Stunden sollte die Zugriffsberechtigung enden.
Das ist eine gute Idee.
Andererseits sollte sich der Benutzer auch bewußt abmelden können. Wie geht das? Mit session_unset() ?
Nein, einer Kombination von session_unset() und anschließendem session_destroy().
Das hat die Vorteile, dass a) nicht bei jeder Anfrage an den Server (bei jeder, auch für Bilder und anderes, Cookies kennen keinen Unterschied zwischen Skripten, Bildern, usw) die gesamten Daten vom Browser an den Server geschickt werden müssen und b) die Daten vor Einsicht und Manipulation durch den Browserbenutzer geschützt sind.
zuviel zur sicherheit ;)
http://www.heise.de/newsticker/meldung/51195
Hello,
Andererseits sollte sich der Benutzer auch bewußt abmelden können. Wie geht das? Mit session_unset() ?
Nein, einer Kombination von session_unset() und anschließendem session_destroy().
session_unset() ist ersetzt worden durch unset($_SESSION) und löscht einfach das Session-Array im RAM.
Session_destroy() löscht die Session-Datei()
Dadurch ist der User aber nicht unbedingt abgemeldet, denn das Login-Flag könnte auch unter der Session-Nummer in einer DB gespeichert werden bzw einer anderen Tabelle der DB, wenn man die Sessiondaten selbst auch dort ablegt.
Ein set_cookie(session_name(),0) müsste dafür sorgen, dasss das Cookie auch im Browser gelöscht wird und beim nächsten Aufruf eben dann z.B. eine neue Session begonnen wird.
Für eine dedizierte Abmeldung des Users ist es aber viel besser, ein Login-Flag zu löschen. Die Session kann sogar bestehen bleiben, weil der user vielleicht noch kontinuierlich weitersurfen will und nur noch Daten sehen will, die ohne Anmeldung angezeigt werden dürfen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom