![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 404
|
Hallo,
ich zweifel gerade an mir selbst... Ich habe ein ogin script, welches auf wunsch Cookies setzt damit man sich später nicht nochmal einloggen muss. Bei meinem Logout script lösche ich die Cookies und zerstöre die Session. Aber irgendwie werden meine Cookies nicht gelöscht Folgender Code: PHP-Code:
PHP-Code:
Achja, man wird nach dem Logout automatisch weitergeleitet (dokument wird verlassen) und der Pfad der Cookies ist "/". Geändert von kampfgnom (28.08.2007 um 12:53 Uhr). |
|
|
|
|
|
Nach oben #2 |
|
Erfahrener Benutzer
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 404
|
keiner ne Ahnung woran das liegt?
//Edit: Gut es geht, es lag daran, das ich in der Login klasse wo die login cookies gesetzt werden sollten, da wurden die cookies nicht gesetzt (durch ne falsche if abfrage) und wenn man sich ausloggte dann wurde natürlich wieder ein cookie gesetzt. Geändert von kampfgnom (28.08.2007 um 14:20 Uhr). |
|
|
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
session_destroy() leert werder $_SESSION noch löscht es den Sitzungs-Keks. Das musst du selbst erledigen. Ein Beispiel findest du im Handbuch:
http://www.php.net/manual/en/functio...on-destroy.php Am besten kapselst du das natürlich gleich in einem Session-Objekt. Basti |
|
|
|
|
|
Nach oben #4 |
|
Erfahrener Benutzer
Registriert seit: 27.09.2006
Ort: Radebeul
Beiträge: 404
|
Naja ich machs immer so, das beim Logout meine Selbstgesetzen Cookies gelöscht werden, die Session mit session_destroy() zertsört wird und leite danach wieder auf die Hauptseite um.
Wenn man sich danach wieder einloggen will, ist das SESSION array dann lehr. |
|
|
|
|
|
Nach oben #5 |
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
Das ist sehr fehleranfällig, denn diese "Regel", sofort nach dem Log-Out auch den Redirect zu machen musst du im Kopf haben. Es gibt keinen Code, mit dem das auch für die Zukunft gewährleistet werden könnte. Eventuell kommen irgendwann mal Funktionen dazu, die du vor jedem Skript-Ende oder Redirect durchführen möchtest (session_write_close() gehört übrigens immer vor einen Redirect, spielt hier aber ja keine Rolle) und da hast du leicht aus dem Blick verloren, dass die Daten in $_SESSION nicht mehr gültig sind. Macht ja auch keinen Sinn, veraltete/ungültige Daten im Speicher aufzubewahren. Daher besser gleich löschen, Session-Cookie löschen und Session-ID ändern (session_regenerate_id(true)).
Letzteres ist grundsätzlich bei jedem Start einer Session, sowie bei jedem Status-Wechsel (Log-In, Log-Out) angebracht (Stichwort: Session-Fixation). Basti |
|
|
|
|
|
Nach oben #7 |
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
PHP-Code:
Geändert von Basti (30.08.2007 um 10:20 Uhr). |
|
|
|
|
|
Nach oben #11 |
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
Hab oben noch die Session-ID angeklebt, falls kein Cookie gesetzt werden konnte. Hoffe das stimmt so in etwa.
Ich hab in meiner Session-Klasse noch ein @ vor session_destroy(), kann aber gerade nicht finden, wo ich mir das abgeguckt habe. Womöglich gibt es einen Fehler, wenn zwischen dem session_start() und dem session_destroy() ein anderer Prozess die Session-Datei löscht? Der Garbage Collector schaut sich ja die mtime der Dateien an und springt ja auch nicht bei jedem Request an. Auch kann es ja unterschiedliche Werte der Lebensdauer auf ein Verzeichnis geben. Daher nochmal ein paar Tipps zum Umgang mit Sessions zusammengefasst: - Verzeichnis immer explizit je Anwendung angeben. Das verhindert sowohl, dass andere Skripte die Session-Dateien bei einer dort geringer eingestellten Lebensdauer vorzeitig löschen und schützt die Dateien in einer Shared-Host-Umgebung natürlich vor dem Zugriff der anderen Kunden auf dem Server, der bei einem gemeinsamen /tmp-Verzeichnis durchaus möglich sein kann. - Startzeit immer selbst speichern und Session ggf. selbst beenden/neu starten, wenn abgelaufen. - Beim ersten Start der Session Session-ID wechseln. - Bei jedem Statuswechsel Session-ID wechseln. - Selbst bei session.trans-sid bei einem Redirect die Session-ID ggf. selbst anhängen, da absolute URIs ja nicht umgeschrieben werden (und Werte im Location-Header womöglich eh nicht, aber das weiß ich nicht auswendig). - register_globals immer ausschalten, denn sonst überschreiben Variablen im globalen Namensraum automatisch Session-Variablen, wenn eine derart benannte Session-Variable existiert! - session_regenerate_id() löscht nur die alten Session-Daten (z.B. Datei), wenn der erste Parameter auf true steht (ab 5.1), andernfalls selbst löschen! - Das Speichern und Kontrollieren einer maximalen Gesamtlaufzeit einer Session kann zusätzliche Sicherheit bieten. - Beim Kapseln der Session in einer Klasse dürfen die Daten natürlich nicht in $_SESSION gespeichert werden bzw. eben erst beim Speichern der Session, da sonst die Kapselung ja für den Arsch ist. - Session-Dateien werden von dem Skript gesperrt, so dass ein explizites session_write_close(); bei Framesets, Weiterleitungen etc. Verzögerungen ersparen kann. - Ein $_SESSION = $aArray; scheint Probleme zu machen. Es wird ein foreach($aArray as $sKey => $mValue) $_SESSION[$sKey] = $mValue; empfohlen. Hoffe, das hilft dem einen oder anderen weiter. …wird wohl mal Zeit für ein kleines Tutorial. Basti |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Now Playing! | Lars | Plauderecke | 2377 | 26.08.2008 03:12 |
| [Thunderbird] eMails werden nur zum löschen markiert | MrNiceGuy | Plauderecke | 5 | 13.09.2007 18:56 |
| Prob. beim Ordner löschen | X-Unity.de | PHP-Programmierung | 15 | 19.03.2006 11:27 |
| Cookies - Was haltet ihr davon? | MrNiceGuy | Plauderecke | 17 | 01.12.2005 09:47 |
| IE + Cookies | Chr!s | PHP-Programmierung | 9 | 07.09.2005 18:51 |