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-Key: 134341

Url: https://administrator.de/contentid/134341

Printed on: April 23, 2024 at 22:04 o'clock

Member: dog
dog Jan 25, 2010 at 23:35:34 (UTC)
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
setcookie(session_name(),false);
löschen...
Member: coltseavers
coltseavers Jan 26, 2010 at 00:01:17 (UTC)
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 ?!
Member: dog
dog Jan 26, 2010 at 00:39:17 (UTC)
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:
ini_set('display_errors','On');  
error_reporting(E_ALL|E_STRICT);
Member: coltseavers
coltseavers Jan 26, 2010 at 00:43:48 (UTC)
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
Mitglied: 62929
62929 Jan 26, 2010 at 06:42:52 (UTC)
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.
Member: dog
dog Jan 26, 2010 at 08:32:52 (UTC)
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