mmofacts.com

Session ohne Sinn beendet

gepostet vor 16 Jahre, 7 Monate von azamaroth
Habe anscheinend ein Problem mit dem Webserver:
Man loggt sich in meinem Browsergame ein, klickt ein paar mal herum, und dann ist die Session auf einmal beendet. Habt ihr einen Tipp, ob ich da irgendwas machen kann oder vielleicht irgendwelche Befehle, mit denen ich das checken kann?
Webserver ist Strato. Das Problem trat vorgestern auf, ich habe nichts am Code verändert...
Ich hoffe, da hat jemand einen Tipp.
gepostet vor 16 Jahre, 7 Monate von Kampfhoernchen
Session-lifetime?
Was prüfst du (IP oder so)?
Sind Frames im Einsatz?
EDIT: Ich hasse tippen und an was anderes Denken. Ach was, es war die Tastatur schuld.
gepostet vor 16 Jahre, 7 Monate von Kapsonfire
Wie wird die Sessionid übergeben?
GET oder COOKIE oder POST (naja POST ist eher selten)
gepostet vor 16 Jahre, 7 Monate von azamaroth
Hmm... also die Session ID übergebe ich gar nicht. Ich nutze das nur, um die Daten das Charakters in Session-Variablen zu speichern, um sie nicht immer wieder neu auszulesen.
Session-Lifetime habe ich nicht eingestellt. Ich prüfe nichts (keine IP). Nutze keine Frames.
Es wurde fest gestellt, dass die Session nicht gleich beendet wird, wenn man 10 Sekunden wartet. Allerdings funktionieren dann trotzdem nicht alle Sachen, wie zum Beispiel der Kampf, wird der beendet, ist die Variable "Kamp_aktiv" immer noch auf 1, obwohl sie auf 0 sein sollte. Oder auch, wenn man sich mit einem anderen CHarakter einloggt, hat man plötzlich die Daten von dem vorher eingeloggten Charakter stehen, die dann aber sofort wechseln, wenn man eine Aktion tätigt.
Habe Strato angeschrieben, die konnten aber keinen Fehler entdecken. Komisch fand ich halt nur, dass das plötzlich auftrat. Vielleicht haben die irgendwas geändert, und meine Programmierweise passt nun nicht mehr....
gepostet vor 16 Jahre, 7 Monate von Otteros
Original von azamaroth
Hmm... also die Session ID übergebe ich gar nicht. Ich nutze das nur, um die Daten das Charakters in Session-Variablen zu speichern, um sie nicht immer wieder neu auszulesen.
Session-Lifetime habe ich nicht eingestellt. Ich prüfe nichts (keine IP). Nutze keine Frames.
Es wurde fest gestellt, dass die Session nicht gleich beendet wird, wenn man 10 Sekunden wartet. Allerdings funktionieren dann trotzdem nicht alle Sachen, wie zum Beispiel der Kampf, wird der beendet, ist die Variable "Kamp_aktiv" immer noch auf 1, obwohl sie auf 0 sein sollte. Oder auch, wenn man sich mit einem anderen CHarakter einloggt, hat man plötzlich die Daten von dem vorher eingeloggten Charakter stehen, die dann aber sofort wechseln, wenn man eine Aktion tätigt.

Hast du daran gedacht, das Werte in der Session-Variable erst beim nächsten Seitenaufruf geändert sind und nicht von jetzt auf gleich geändert werden?
Wenn nicht: Werte in Varaiblen zwischenspeichern, darin ändern, bearbeiten usw. und am ende wieder zurückschreiben, vll geht dann wieder alles.
Noch was, wenn du die Sessionid nicht übergibts, wie weiß dann dein Script, welche Session Daten es laden muss ich glaub du meinst, es wird so gemacht, wie in der php.ini eingestelllt und das ist meistens COOKIE.
gepostet vor 16 Jahre, 7 Monate von MasterPyoda
Ich hatte auch Probleme, dass nach bestimmten Seitenaufrufen bestimmte Funktionen nicht mehr zur Verfügung standen. Das lag daran, dass register_globals auf "on" war, wenn ich mich recht erinnere. Folglich war $_SESSION['auto'] == $auto. Und wenn ich dann $variable gesetzt hab, wurde leider $_SESSION['variable'] überschrieben und hatte nicht mehr den Wert, den es eigentlich haben sollte. Überprüf das einfach mal
gepostet vor 16 Jahre, 7 Monate von azamaroth
Hmmm.... also ich mache das so:
session_start();
und danach lade ich Daten aus der Datenbank.
$_SESSION['char_id'] = 123;
$_SESSION['blabla']=xxx;
[...]
und am Ende schreibe ich die Variablen wieder zurück in die Datenbank.
Ich finde auch keine php.ini auf dem Server, ich glaube diese Konfig-Dateien sind Strato vorbehalten. Die sehe ich gar nicht erst.
gepostet vor 16 Jahre, 7 Monate von Otteros
Original von azamaroth
Hmmm.... also ich mache das so:
session_start();
und danach lade ich Daten aus der Datenbank.
$_SESSION['char_id'] = 123;
$_SESSION['blabla']=xxx;
[...]
und am Ende schreibe ich die Variablen wieder zurück in die Datenbank.
Ich finde auch keine php.ini auf dem Server, ich glaube diese Konfig-Dateien sind Strato vorbehalten. Die sehe ich gar nicht erst.

Das ist der falsche Weg, die Sessiondaten (also was du da speicherst) wird erst beim nächsten aufruf des Scriptes (oder folgesriptes) als Daten vefügbar und bisdahin sind nur die Daten aus dem Vorherigen Scriptaufruf(en) verfügbar als abruf.
Und um dir die Einstellungen der php.ini zu sehen einfach mal phpinfo(); in nem script ausführen, dann werden dir alle Eintstellungen angezeigt.
MfG Otto
gepostet vor 16 Jahre, 7 Monate von Kampfhoernchen
Also wenn ich mich recht erinnere, wird $_SESSION immer aktuell gehalten.
Wenn gleichzeitig ein anderes Script auf die Session zugreift, sieht es noch die alten Informationen (obwohl das eigentlich blockiert sein sollte).
gepostet vor 16 Jahre, 7 Monate von raufaser
Obs an register_globals = on liegt kannst du ja leicht testen, wenn du vor beginn deiner Skripte ein ini_set( 'register_globals', 'off' ) setzt. Falls Strato das zulässt und das nicht per Config verboten hat.
Ansonsten könnte es vielleicht auch noch mit nem Cookie Problem zusammenhängen, PHP macht das doch über einen Cookie, wenn es nicht explizit abgeschaltet wird.
Gruß,
Marc
gepostet vor 16 Jahre, 7 Monate von Otteros
Original von Kampfhoernchen
Also wenn ich mich recht erinnere, wird $_SESSION immer aktuell gehalten.
Wenn gleichzeitig ein anderes Script auf die Session zugreift, sieht es noch die alten Informationen (obwohl das eigentlich blockiert sein sollte).

Dann frag ich mich, warum bei mir das mal ein Fehler war, da wollt ich die aktuellen Daten nutzen, hab aber nur die alten erhalten (gleiches Script, beim gleichen Aufruf) und als ich nachgelesen hab, stand da, das ich durch $_SESSION immer nur die Daten, wie sie vor aufruf waren erhalten kann. Aber ist ja egal, wenn er wirklich nur die Daten aus der DB in der Session zwischenspeichert, um sie dann wieder zurück zu schreiben, dann kann man das auch anders lösen, weil dann ist es eine völlig sinnlose Aktion überhaupt eine Session zu starten, weil der User Daten "erhält", die er garnicht braucht (ich mein den Session-Cookie o.ä.).
gepostet vor 16 Jahre, 7 Monate von Fornax
Original von Kampfhoernchen
Also wenn ich mich recht erinnere, wird $_SESSION immer aktuell gehalten.
Wenn gleichzeitig ein anderes Script auf die Session zugreift, sieht es noch die alten Informationen (obwohl das eigentlich blockiert sein sollte).

Nein, es kann immer nur eine Session geöffnet sein. Das sieht man besonderst deutlich bei Frames.
Wenn ein session_start ausgeführt wird, und schon eine Session offen ist, wird gewartet, bis diese geschlossen wird. deshalb sollte man session_write_close ausführen, wenn man die Session nicht braucht (z.B. ganz am Anfang die Session auslesen, dann schließen, dann erst die ganzen DB-Abfragen).
*Ich such mal schnell die genaue Erklärung*
Ah, ging schnell: php.net session_write_close
gepostet vor 16 Jahre, 7 Monate von azamaroth
So sieht meine Config aus:
'./configure' '--prefix=/opt/RZphp4pl' '--with-jpeg-dir=../local' '--with-gd' '--with-png-dir=../local' '--with-freetype-dir=../local' '--with-mysql=../local' '--with-dom=../local' '--with-zlib=../local' '--with-ndbm' '--with-mhash=../local' '--with-mcrypt=../local' '--enable-discard-path' '--enable-sysvshm=yes' '--enable-sysvsem=yes' '--enable-debug=no' '--enable-bcmath=yes' '--enable-safe-mode=yes' '--with-exec-dir=/opt/RZphp4pl/exec' '--with-config-file-path=/opt/RZphp4pl/etc' '--enable-memory-limit' '--enable-ctype' '--enable-pcntl' '--enable-calendar' '--enable-dbase' '--enable-trans-sid'
Ich habe das Spiel gerade nochmal getestet, ich kann 2-3 Aktionen durchführen, plötzlich sind einige Variablen leer... Wenn ich dann den Browser aktualisiere geht es aber erstmal normal wieder weiter.
Naja, ich probiere dann mal aus...
gepostet vor 16 Jahre, 7 Monate von azamaroth
Kann das ein Problem sein, dass ich jedesmal session_start() ausführe?
Sollte ich stattdessen die SessionID übergeben?
gepostet vor 16 Jahre, 7 Monate von Kampfhoernchen
Session_start() brauchst du ja.
Hast du mal ein vorgefertigtes Script (z.B. phpBB) probiert ob das Problem da auch auftritt? Nur um zu testen ob das Problem beim Script oder beim Server liegt.
gepostet vor 16 Jahre, 7 Monate von Amun Ra
Wäre auf jeden Fall ne gute Möglichkeit das mal zu testen,
aber das phpbb nutzt Datenbank-basierte Sessions...
gepostet vor 16 Jahre, 6 Monate von azamaroth
So, das Problem wurde gelöst, indem ich die PHP Version des Verzeichnisses im STRATO-Konnfigurationsürpgramm auf die Version 5 gesetzt habe.
Warum das jetzt so war, weiß aber nicht....

Auf diese Diskussion antworten