Session geht bei Seitenwechsel verloren
xearon
- php
Hallo,
ich habe ein Problem mit einer Session.
Ich habe zwei webs auf einem Server laufen. eins ist "normal" das andere SSL auf dem "normalen" web ist ein Online-Shop wo man Sachen in einen Warenkorb legt. Artikel werden in einer Datenbank abgelegt unter der Session-Id. wenn man zur Kasse geht springt man in einem Popup-Fenster auf das SSL-Web Weil ja sensible Daten evtl. verschlüsselt werden sollten... :o) Es wird die Session-ID mit Übergeben, das auf die Artikel im Warenkorb zugegriffen werden kann.
war auch kein Problem, bis von PHP 4.3.6 auf 4.3.10 geupdatet wurde.
Seit dem Update wird auf einmal die Session-ID trotz Übergabe neu vergeben und der Warenkorb ist logischer(oder ärgerlicher) Weise leer.
php.ini Einstellungen sind die selben wie vorher.
Hat vieleicht jemand eine Idee??
Vielen Dank
echo $begrüßung;
Ich habe zwei webs auf einem Server laufen. eins ist "normal" das andere SSL ... springt man ... auf das SSL-Web ... wird die Session-ID mit Übergeben
Wie geschieht das Übergeben und wie sieht die Initialisierung der Session im übernehmenden Script aus?
echo "$verabschiedung $name";
echo $begrüßung;
Ich habe zwei webs auf einem Server laufen. eins ist "normal" das andere SSL ... springt man ... auf das SSL-Web ... wird die Session-ID mit Übergeben
Wie geschieht das Übergeben und wie sieht die Initialisierung der Session im übernehmenden Script aus?
echo "$verabschiedung $name";
Hallo,
so ist der Link zur Kasse:
https://ssl.domain.de/bestell1.php?<?=session_name() .'=' . session_id();?>
Und so die Übername auf dem SSL-Web:
<?
@session_start();
if($_GET["PHPSESSID"]!=""){$_COOKIE["PHPSESSID"]=$_GET["PHPSESSID"];}
....
?>
echo $begrüßung;
so ist der Link zur Kasse:
https://ssl.domain.de/bestell1.php?<?=session_name() .'=' . session_id();?>
Und so die Übername auf dem SSL-Web:
Was gibt session_name() aus? Unter der Annahme, dass der Standardwert nicht geändert wurde, wäre es zwar möglich einmal die Funktion session_name() zu verwenden, und ein anderes Mal einen String, aber schön ist solch ein Wechsel nicht. Ich plädiere dafür, konsequent nur eins von beiden zu verwenden.
@session_start();
if($_GET["PHPSESSID"]!=""){$_COOKIE["PHPSESSID"]=$_GET["PHPSESSID"];}
Da der Keks beim Wechsel der Domain nicht übernommen werden kann, sehe ich eine Übergabe als GET-Parameter auch als sinnvoll an. POST wäre eventuell eine noch eine Alternative.
Um der Ursache auf den Grund zu gehen, wäre es hilfreich, die Session-IDs zu vergleichen. Die übergebene ID siehst du ja im Link. Gibt session_id() die selbe aus, wenn es nach dem session_start() abgefragt wird?
Hast du mal alle Fehlermeldungen eingeschaltet? error_reporting auf E_ALL eingestellt?
Nimm mal das @ von session_start() weg. Vielleicht gibt PHP noch einen Hinweis.
echo "$verabschiedung $name";
Was gibt session_name() aus? Unter der Annahme, dass der Standardwert nicht geändert wurde, wäre es zwar möglich einmal die Funktion session_name() zu verwenden, und ein anderes Mal einen String, aber schön ist solch ein Wechsel nicht. Ich plädiere dafür, konsequent nur eins von beiden zu verwenden.
»»
session_name() gibt PHPSESSID aus.
Um der Ursache auf den Grund zu gehen, wäre es hilfreich, die Session-IDs zu vergleichen. Die übergebene ID siehst du ja im Link. Gibt session_id() die selbe aus, wenn es nach dem session_start() abgefragt wird?
»»
Nein, Sie wird neu vergeben
Hast du mal alle Fehlermeldungen eingeschaltet? error_reporting auf E_ALL eingestellt?
Nimm mal das @ von session_start() weg. Vielleicht gibt PHP noch einen Hinweis.
error_reporting ist auf E_ALL @ weggenommen keine Fehlermeldungen oder Warnungen...
...ratlos...
echo $begrüßung;
Um der Ursache auf den Grund zu gehen, wäre es hilfreich, die Session-IDs zu vergleichen. Die übergebene ID siehst du ja im Link. Gibt session_id() die selbe aus, wenn es nach dem session_start() abgefragt wird?
Nein, Sie wird neu vergeben
Warum das so ist weiß ich momentan nicht. Um das Verhalten nachzustellen wäre es hilfreich, wenn du mal zeigst, was phpinfo() im Abschnitt zu den Sessions anzeigt.
Ich nehme aber an, dass es schon reicht, wenn du explizit session_id() mit dem Wert aus dem $_GET initialisierst, bevor du start_sesion() aufrufst.
echo "$verabschiedung $name";
Ich nehme aber an, dass es schon reicht, wenn du explizit session_id() mit dem Wert aus dem $_GET initialisierst, bevor du start_sesion() aufrufst.
Nein, es sind immer noch zwei verschiedene session-ids
Session Support enabled
Registered save handlers files user
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 45 45
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 2400 2400
session.gc_probability 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid Off Off
Hello,
Ich nehme aber an, dass es schon reicht, wenn du explizit session_id() mit dem Wert aus dem $_GET initialisierst, bevor du start_sesion() aufrufst.
Das wäre dann Session "zu Fuß".
session.use_only_cookies Off Off
session.use_trans_sid Off Off
Du hast den URL-based Session Support ausgeschaltet. Wenn mich nicht alles täuscht, funktioniert das rein wie raus nur, wenn session.use_trans_sid on ist.
An Deiner Stelle würde ich die Sessionnummer in einem Postparamter übergeben (Hidden-Feld)
Das hat den Vortel, dass der Normaluser sie nicht sieht und die normalen Logs von Webservern und Hobs sie nicht speichern. Und dann kannst Du auch die Methode von Dedlfix verwenden, mit der Du die Session mit einer vorbelegten ID startest.
Dann musst DU aber den Cookie vor dem Start auch selber setzen. Zumindest war das in den älteren PHP-Versionen so. Der Cookie wurde nämlich nur gesetzt beim Session-Start, wenn keine Session-Nummer empfangen wurde (wenn session.use_trans_sid == Off).
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
session.use_only_cookies Off Off
session.use_trans_sid Off OffDu hast den URL-based Session Support ausgeschaltet. Wenn mich nicht alles täuscht, funktioniert das rein wie raus nur, wenn session.use_trans_sid on ist.
Wenn ich session_use_trans_sid auf on stelle dann hängt PHP die Session ID doch an jeden Link mit an. Oder nicht?
Das wollte ich eben vermeiden.
Das Problem besteht komischerweise nur, wenn ich vom normalen auf das SSL Web springe. auf der ersten Seite im SSL wird ja die Session-ID übernommen, was sich aber ändert, sobald ich auf die nächste Seite komme. Da wird dann eine neue Session-ID vergeben.
Stellt sich die Frage, warum das so ist. Und vorallem warum erst seit PHP-Version 6.3.10 was ja eigentlich "nur" ein BUG-Release ist...
Jetzt muss ich im SSL-Bereich immer die Session "zu Fuß" übergeben.
Aber kann das der Sinn der Sache sein??
G
Olli
Hello,
Stellt sich die Frage, warum das so ist. Und vorallem warum erst seit PHP-Version 6.3.10 was ja eigentlich "nur" ein BUG-Release ist...
Uii, da habe ich wohl ein bisschen lange geschlafen. Die letzte Version, die ich ausprobiert habe, ist die 5c3
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Uii, da habe ich wohl ein bisschen lange geschlafen. Die letzte Version, die ich ausprobiert habe, ist die 5c3
Ups, hab ich wohl die Wuchstaben Verbechselt :o)
Hello,
da wäre jetzt mal ein Blick in die php.ini sinnvoll bzw in phpinfo().
Vermutlich ist da eine Änderung eingetreten --> session.use_only_cookies = on ?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Vermutlich ist da eine Änderung eingetreten --> session.use_only_cookies = on ?
session.use_onlycookies war vorher wie danach auf off...
Hallo,
bis von PHP 4.3.6 auf 4.3.10 geupdatet wurde.
eh boah eh, dieses Deutsch... Richtig muß es natürlich "upgedatet" heißen ;-)
@session_start();
ja, wenn Du die Fehlerausgaben unterdrückst, kannst Du natürlich auch keine Fehler gemeldet bekommen. Das ist so, wie wenn Du mit dem Auto auf der Autobahn bist, und weil die Tankanzeige Leerstand anzeigt, schlägst Du das Lämpchen kaputt, um noch 500 Km fahren zu können...
if($_GET["PHPSESSID"]!=""){$_COOKIE["PHPSESSID"]=$_GET["PHPSESSID"];}
hast Du Dir denn $_GET["PHPSESSID"] überhaupt mal ausgeben lassen? Heißt die Session denn noch "PHPSESSID"?
Gruß, Andreas
ja, wenn Du die Fehlerausgaben unterdrückst, kannst Du natürlich auch keine Fehler gemeldet bekommen. Das ist so, wie wenn Du mit dem Auto auf der Autobahn bist, und weil die Tankanzeige Leerstand anzeigt, schlägst Du das Lämpchen kaputt, um noch 500 Km fahren zu können...
Kommt auch ohne @ kein Fehler
if($_GET["PHPSESSID"]!=""){$_COOKIE["PHPSESSID"]=$_GET["PHPSESSID"];}
hast Du Dir denn $_GET["PHPSESSID"] überhaupt mal ausgeben lassen? Heißt die Session denn noch "PHPSESSID"?
Ja, sie heisst noch PHPSESSID
hast Du Dir denn $_GET["PHPSESSID"] überhaupt mal ausgeben lassen? Heißt die Session denn noch "PHPSESSID"?
Ja, sie heisst noch PHPSESSID
und...? was hat sie für einen Wert?
Gruß, Andreas
und...? was hat sie für einen Wert?
halt eine normale Session-ID:
247731cad222e042cd2f3c645a18f455
Hallo Leute,
da muss ich mich ja grad mal mit einmischen.
Ich hab ein ähnliches Problem, allerdings Browser abhängig!
< http://forum.de.selfhtml.org/archiv/2005/5/t107710/>
Bei mir werden meistens AOL Nutzer aus meinen Sessions rausgekickt. Warum? Keine Ahnung! Die Links (mit SESS_ID) passen alle (bei anderen Browser funktioniert es ja auch!).
Grüße in die weiten des Weballs!