Sessions in AJAX
droom
- javascript
0 Steel0 droom
0 Sven Rautenberg
Ich bastle ein kleines e-Shop in AJAP. Ich möchte nun die Möglichkeit einem User geben, seinen Korb während der Besuch auf meiner Seite zu füllen .
Der User soll sich nicht einloggen und ich möchte keine Cookie benutzen.
Ich könnte die Sessions in PHP machen aber ich benötige eine Lösung in Ajax. Ich habe recherchiert und nur Cookie-Lösungen gefunden oder diesen interessanten Artikel:
http://aktuell.de.selfhtml.org/artikel/javascript/wertuebergabe/index.htm#a3
Ist es denn möglich mit Ajax bzw. Java-script Sessions wie man sie aus PHP kennt, zu machen?
PS: Keine Angst. Der Shop wird nicht eingesetzt aber dient als Lehrzweck. ;-)
Hi!
Nur theoretisch. Grundsaetzlich hat es wenig Sinn, soetwas clientseitig zu machen, da es immer vom User manipuliert werden kann.
Jedes Sessionkonzept basiert doch darauf, dass der user eindeutig identifiziert werden kann. Und das Ganze moeglichst, ohne dass es manipulierbar ist.
Du kannst natuerlich mit JS einen beliebigen Zufallsstring generieren und diesen benutzen um den User zu identifizieren. Du muesstest dafuer sorgen, dass der client dem Server mitteilt, welchen String er gedenkt zu benmutezen. Der Server muesstre dan pruefen ob es sowas schon gibt und so weiter.
Das macht diese Anwendung aber auch unsicher. Nicht nur, dass jemand diese Session ID beliebig manipulieren kann, er bekommt auhc mit, wenn es schon eine gibt und kann diese benutzen um auf Kosten eines anderen Users lustig bestellen.
Eine clientseitige Loesung, um soetwas wie eine session ID zu erstellen, fuehrt das Prinzip der Sessions quasi ad absurdum.
Soviel dazu. Aber was mich interessiert: Warum willst Du denn irgendwas im Browser speichern? Du benutzt doch schon AJAX. Wo ist denn das Problem, die Daten serverseitig in einer Session zu speichern? Du muesstest nur die SID im Querystring uebergeben, dann brauchst Du keine Cookies und kannst auch gut mit AJAX arbeiten.
Wo ist denn das Problem, die Daten serverseitig in einer Session zu >>speichern? Du müsstest nur die SID im Querystring übergeben, dann >>brauchst Du keine Cookies und kannst auch gut mit AJAX arbeiten.
Okay, das probiere ich jetzt. Ich habe auf der ersten Seite :
<?php
session_start();
if (!session_is_registered('cart')) {
session_register('cart');
$_SESSION['cart'] = array();
}
?>
Danach surfe ich mit Ajax auf meiner Seite. Alle Links sind Ajax-Links.
Danach versuche ich, mein Korb zu füllen. Es geht nicht. $_SESSION['cart'] ist immer leer.
Dann ist es mir aufgefallen, dass er meine SID nicht kennt, weil ich es mittransportieren muss. Und nun die Frage, was muss mein SID mittransportieren? Der Name der Session oder $_SESSION['cart']?
Moin!
Okay, das probiere ich jetzt. Ich habe auf der ersten Seite :
Bitte streiche aus deinem Nutzungsverhalten komplett die Befehle session_is_registered() und session_register()!
<?php
session_start();
if (!session_is_registered('cart')) {
session_register('cart');
$_SESSION['cart'] = array();
}
?>
Danach surfe ich mit Ajax auf meiner Seite. Alle Links sind Ajax-Links.
Danach versuche ich, mein Korb zu füllen. Es geht nicht. $_SESSION['cart'] ist immer leer.
Vermutlich wegen deiner fehlerhaften Session-Befehle. Den einzigen Befehl, den du zwingend benötigst, ist session_start(). Im Bedarfsfall eventuell dann noch session_id(), session_name() und session_regenerate_id(). Nur in extremen Ausnahmefällen noch session_destroy().
Dann ist es mir aufgefallen, dass er meine SID nicht kennt, weil ich es mittransportieren muss. Und nun die Frage, was muss mein SID mittransportieren? Der Name der Session oder $_SESSION['cart']?
Die Session-ID ist üblicherweise als Cookie abgelegt. Prüfe, ob das der Fall ist. Falls du lokal testest: Dein Servername muß Punkte enthalten, sowas wie "localhost" oder "testserver" funktioniert nicht. Browser erlauben Cookies von Domains, die keine Punkte enthalten, nicht.
Alternativ mußt du die Kombination der Funktionsergebnisse session_name() und session_id() im AJAX-Request selbst einbauen und zurückschicken. Gegebenenfalls kannst du dir auch den Inhalt der Konstanten SID zunutze machen, die gefüllt ist, wenn PHP kein Cookie feststellen konnte.
- Sven Rautenberg
Moin!
Ich bastle ein kleines e-Shop in AJAP. Ich möchte nun die Möglichkeit einem User geben, seinen Korb während der Besuch auf meiner Seite zu füllen .
Der User soll sich nicht einloggen und ich möchte keine Cookie benutzen.Ich könnte die Sessions in PHP machen aber ich benötige eine Lösung in Ajax.
Wozu denn noch Ajax? Du schließt alle sinnvoll für so eine Aufgabe zu nutzenden Servertechniken aus, brauchst also im Prinzip sowieso keinen Server - und ohne Server geht auch kein Ajax.
Ich habe recherchiert und nur Cookie-Lösungen gefunden oder diesen interessanten Artikel:
http://aktuell.de.selfhtml.org/artikel/javascript/wertuebergabe/index.htm#a3
Das liegt daran, dass Cookies die einzige sinnvolle Möglichkeit sind, serverseitig den Nutzer eindeutig zu identifizieren.
Ist es denn möglich mit Ajax bzw. Java-script Sessions wie man sie aus PHP kennt, zu machen?
Nein, nach meiner Auffassung nicht.
Welche Gründe sprechen gegen Cookies?
- Sven Rautenberg