coltseavers
Goto Top

Session beenden mit session destroy() klappt nicht so wirklich

Hallo!

Ich habe folgendes Problem mit Sessions:

Beispielprojekt: Onlineshop.
Sessions werden eingesetzt, der Kunde kauft ein und schliesst die Bestellung ab.

Ich möchte nun erreichen, dass dann die Session komplett "zerstört" wird.
Dazu führe ich den Befehl "session_destroy();" aus.

Das Problem ist nun offenbar, dass die Session-ID in einem Cookie beim Client gespeichert wird.
Wenn man nach Bestellabschluß (also auch nach session_destroy();) dann auf den Button "Warenkorb anzeigen" klickt,
wird der Warenkorb wieder samt Inhalt angezeigt (Dieser orientiert sich nach der Session-ID). Er soll aber nach Bestellabschluss natürlich leer sein.

Was läuft da falsch? Wird bei session_destroy(); nicht automatisch auch das Cookie gelöscht?
Oder muss man das noch explizit nachholen? Falls ja: wie?

Danke & Gruß,
Colt Seavers

Content-ID: 134341

Url: https://administrator.de/forum/session-beenden-mit-session-destroy-klappt-nicht-so-wirklich-134341.html

Ausgedruckt am: 05.04.2025 um 14:04 Uhr

dog
dog 26.01.2010 um 00:35:34 Uhr
Goto Top
Was das Cookie auf dem Client macht ist doch vollkommen unerheblich.

PHPs interne Session-Implementation speichert auf dem Client nur eine Session-ID, alle Dateien dazu liegt auf dem Server in einer Datei mit dem Namen der ID.

session_destroy löscht alle Daten innerhalb einer Session (nicht die Session selber).
Ich würde aber mal sagen, du hast hier ein tiefergreifendes Problem!

Das Cookie kannst du mit
1
setcookie(session_name(),false);
löschen...
coltseavers
coltseavers 26.01.2010 um 01:01:17 Uhr
Goto Top
Zitat von @dog:

session_destroy löscht alle Daten innerhalb einer Session (nicht die Session selber).


aha?!

Ich find das wird hier anders erklärt:
http://www.selfphp.de/funktionsreferenz/session_funktionen/session_dest ...

Aber egal, was von beiden stimmt:
Wenn alle Daten gelöscht werden, dann ja auch die Session-ID. Der Warenkorb existiert aber weiterhin, und der findet seinen Inhalt über die Session-ID...
verstehe nicht, woher er die dann noch kriegt ?!
dog
dog 26.01.2010 um 01:39:17 Uhr
Goto Top
Ich find das wird hier anders erklärt:

Darum nimmt man auch immer die offizielle Doku: http://de.php.net/session_destroy

Aber egal, was von beiden stimmt:

Stimmt, du hast ein anderes Problem.
Darum aktivierst du erstmal die Fehleransicht:
1
2
ini_set('display_errors','On');  
error_reporting(E_ALL|E_STRICT);
coltseavers
coltseavers 26.01.2010 um 01:43:48 Uhr
Goto Top
habe rausgefunden, dass das Problem beim Cookie liegt.
Wenn ich das Cookie manuell (im Browser) lösche, ist auch der Warenkorb leer.

kriegs aber nicht mit setcookie() gelöscht/geändert -> fehlermeldung.
auch regenerate_session_id() bringt ne fehlermeldung.

fehlermeldung:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/xxx.de/yyyy.php:123) in /var/www/xxx.de/yyy.php on line 111
62929
62929 26.01.2010 um 07:42:52 Uhr
Goto Top
Hallo,

warum nutzt du nicht den expire Parameter von setcookie?
Wenn dir das zu statisch ist, kannst du auch den Cookie aller paar Seitenklicks neu setzen. So kannst du sicher gehen, dass niemand ausgeloggt wird, der sich schon seit Stunden in deinem System befindet.

Gruß
dante!


PS: Header Manipulationen müssen immer vor dem ersten Output passieren, also möglichst am Code Anfang.
dog
dog 26.01.2010 um 09:32:52 Uhr
Goto Top
Das Problem kriegen wir leicht in den Griff:

In der php.ini
output_buffering On
eintragen

oder als erstes in dein Programm
ob_start();
einfügen