$_Session Array leer - ABER nur manchmal

jowag12

Grünschnabel
Hallo, ich glaube, die Frage warum das $_Session Array leer ist, ist schon öfters behandelt worden. Aber dass es bei Abrufen der gleichen Seite mal leer ist und mal nicht habe ich noch nicht so gefunden.

Den Code spare ich mal ein, ich habe session_start(); auf meiner PHP Seite (also auf allen) drin und frage $_SESSION['s_signon'] ab, das ich einmal im logon des Users setze.
Das funktioniert auch prima, solange nicht mehrere Leute auf der Seite sind. Ich kann es hier mit zwei PCs prima simulieren. Beide haben unterschiedliche Session IDs, ab und zu (da muss ich schon mal bis zu 3 min auf beiden die Seite abrufen) passiert es bei dem einen oder anderen, dass das ganze $_Session Array leer (also nicht nur die Variablen ohne Wert) bleibt.

Ein Refresh der Seite bingt manchmal gleich, manchmal erst mehrere Refreshs den Inhalt der Variablen korrekt zurück. Die Session ID bleibt die ganze Zeit pro PC gleich.
Ich habe alles an Debugging probiert, Ergebnis ist immer, dass das Array manchmal komplett leer ist (das wird auch definitiv nur auf der logout Seite neu beschrieben - und da wird auch nur $_SESSION['s_signon']='' gesetzt.

Ich habe den Verdacht, dass her der PHP Server von Strato (vielleicht aus Lastgründen) manchmal einfach die Daten nicht zurückliefert, die er ja in irgeneiner Datei zwischenspeichert. Anders kann ich mir nicht erklären, dass bei Refresh dann plötzlich die Daten wieder da sind.

Gibt es jemanden, der das vielleicht bestätigen kann, ansonsen bin ich am Ende mit meinem Latein (oder besser PHP)?

Danke
jo
 
Ich glaube nicht, dass es am Server liegt.

Aber das lässt sich schnell testen:

PHP:
<?php
session_start();
$_SESSION['variable1'] = $_SESSION['variable1'] + 1;
$_SESSION['variable2'] = $_SESSION['variable2'] + 1;
$variable2 = 0;
echo "Variable 1: ".$_SESSION['variable1']."<br>Variable 2: ".$_SESSION['variable2'];
?>

(Bevor wieder alle meckern: Ja, es wäre auch ++ gegangen)

So, lad das mal rauf und mach 20 mal nen refresh.
variable2 ist nur zu testzwecken *g*
 
Das nenne ich ja mal verrückt.
Irgendwie verwaltet der Server 2 sessions gleichzeitig, obwohl mein Expolorer in einem Fenster weiterarbeitet und nur immer Refresh gedückt wird.

Der Code

session_start();

$_SESSION['variable1'] = $_SESSION['variable1'] + 1;
$_SESSION['variable2'] = $_SESSION['variable2'] + 1;
$variable2 = 0;
echo "Debug-Variable 1: ".$_SESSION['variable1']." - Debug-Variable 2: ".$_SESSION['variable2'];

Nur mit Refresh der Seite

------------ Versuch 1 -----------------------------

Debug-Variable 1: 1 - Debug-Variable 2: 1
Debug-Variable 1: 2 - Debug-Variable 2: 2
Debug-Variable 1: 1 - Debug-Variable 2: 1
Debug-Variable 1: 3 - Debug-Variable 2: 3
Debug-Variable 1: 4 - Debug-Variable 2: 4
Debug-Variable 1: 5 - Debug-Variable 2: 5
Debug-Variable 1: 2 - Debug-Variable 2: 2
Debug-Variable 1: 3 - Debug-Variable 2: 3
Debug-Variable 1: 4 - Debug-Variable 2: 4
Debug-Variable 1: 6 - Debug-Variable 2: 6
Debug-Variable 1: 5 - Debug-Variable 2: 5
Debug-Variable 1: 6 - Debug-Variable 2: 6
Debug-Variable 1: 7 - Debug-Variable 2: 7
Debug-Variable 1: 8 - Debug-Variable 2: 8
Debug-Variable 1: 9 - Debug-Variable 2: 9
Debug-Variable 1: 7 - Debug-Variable 2: 7
Debug-Variable 1: 10 - Debug-Variable 2: 10
Debug-Variable 1: 11 - Debug-Variable 2: 11
Debug-Variable 1: 12 - Debug-Variable 2: 12
Debug-Variable 1: 8 - Debug-Variable 2: 8
Debug-Variable 1: 13 - Debug-Variable 2: 13
Debug-Variable 1: 14 - Debug-Variable 2: 14
Debug-Variable 1: 15 - Debug-Variable 2: 15
Debug-Variable 1: 16 - Debug-Variable 2: 16
Debug-Variable 1: 17 - Debug-Variable 2: 17
Debug-Variable 1: 18 - Debug-Variable 2: 18
Debug-Variable 1: 19 - Debug-Variable 2: 19
Debug-Variable 1: 20 - Debug-Variable 2: 20
Debug-Variable 1: 21 - Debug-Variable 2: 21
Debug-Variable 1: 22 - Debug-Variable 2: 22
Debug-Variable 1: 23 - Debug-Variable 2: 23
Debug-Variable 1: 24 - Debug-Variable 2: 24
Debug-Variable 1: 25 - Debug-Variable 2: 25
Debug-Variable 1: 9 - Debug-Variable 2: 9

--------------- noch ein Versuch -----------

Debug-Variable 1: 1 - Debug-Variable 2: 1
Debug-Variable 1: 2 - Debug-Variable 2: 2
Debug-Variable 1: 3 - Debug-Variable 2: 3
Debug-Variable 1: 4 - Debug-Variable 2: 4
Debug-Variable 1: 5 - Debug-Variable 2: 5
Debug-Variable 1: 6 - Debug-Variable 2: 6
Debug-Variable 1: 7 - Debug-Variable 2: 7
Debug-Variable 1: 8 - Debug-Variable 2: 8
Debug-Variable 1: 9 - Debug-Variable 2: 9
Debug-Variable 1: 10 - Debug-Variable 2: 10
Debug-Variable 1: 11 - Debug-Variable 2: 11
Debug-Variable 1: 12 - Debug-Variable 2: 12
Debug-Variable 1: 13 - Debug-Variable 2: 13
Debug-Variable 1: 14 - Debug-Variable 2: 14
Debug-Variable 1: 15 - Debug-Variable 2: 15
Debug-Variable 1: 16 - Debug-Variable 2: 16
Debug-Variable 1: 17 - Debug-Variable 2: 17
Debug-Variable 1: 18 - Debug-Variable 2: 18
Debug-Variable 1: 19 - Debug-Variable 2: 19
Debug-Variable 1: 20 - Debug-Variable 2: 20
Debug-Variable 1: 1 - Debug-Variable 2: 1
Debug-Variable 1: 21 - Debug-Variable 2: 21
Debug-Variable 1: 22 - Debug-Variable 2: 22
Debug-Variable 1: 23 - Debug-Variable 2: 23
Debug-Variable 1: 24 - Debug-Variable 2: 24
Debug-Variable 1: 25 - Debug-Variable 2: 25
Debug-Variable 1: 26 - Debug-Variable 2: 26
Debug-Variable 1: 27 - Debug-Variable 2: 27
Debug-Variable 1: 28 - Debug-Variable 2: 28
Debug-Variable 1: 29 - Debug-Variable 2: 29
Debug-Variable 1: 30 - Debug-Variable 2: 30
Debug-Variable 1: 31 - Debug-Variable 2: 31
Debug-Variable 1: 2 - Debug-Variable 2: 2


Da hat mich natürlich interessiert, in welcher Session ich bin.

session_start();

$_SESSION['variable1'] = $_SESSION['variable1'] + 1;
$_SESSION['variable2'] = $_SESSION['variable2'] + 1;
$variable2 = 0;
echo "Debug-Variable 1: ".$_SESSION['variable1']." - Debug-Variable 2: ".$_SESSION['variable2']." - Debug-SessionID: ".$_COOKIE['PHPSESSID'];




Debug-Variable 1: 1 - Debug-Variable 2: 1 - Debug-SessionID:
Debug-Variable 1: 2 - Debug-Variable 2: 2 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 3 - Debug-Variable 2: 3 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 4 - Debug-Variable 2: 4 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 1 - Debug-Variable 2: 1 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 5 - Debug-Variable 2: 5 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 2 - Debug-Variable 2: 2 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 6 - Debug-Variable 2: 6 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 7 - Debug-Variable 2: 7 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 3 - Debug-Variable 2: 3 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 4 - Debug-Variable 2: 4 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 8 - Debug-Variable 2: 8 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 9 - Debug-Variable 2: 9 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 10 - Debug-Variable 2: 10 - Debug-SessionID: 3105774626125ee4acc91d1848f23060

normal weiter

Debug-Variable 1: 33 - Debug-Variable 2: 33 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 5 - Debug-Variable 2: 5 - Debug-SessionID: 3105774626125ee4acc91d1848f23060
Debug-Variable 1: 34 - Debug-Variable 2: 34 - Debug-SessionID: 3105774626125ee4acc91d1848f23060


Bin mal auf die Antwort gespannt :-)
 
Zuletzt bearbeitet:
Ich habe den gleichen Code mal bei einem anderen Web Hoster probiert - ohne Probleme. Bei Strato fängt er irgendwann mal an neu zu zählen und dann schaltet er immer mal wieder zwischen den Pseudo-Sessions hin und her.

Inzwischen ist von der Seite nur noch das übrig:

<?php
session_start();
$_SESSION['variable1'] = $_SESSION['variable1'] + 1;
$_SESSION['variable2'] = $_SESSION['variable2'] + 1;
$variable2 = 0;
echo "Debug-Variable 1: ".$_SESSION['variable1']." - Debug-Variable 2: ".$_SESSION['variable2']." - Debug-SessionID: ".$_COOKIE['PHPSESSID'];
?>

Das Programm wäre zum Reproduzieren auch noch auf dem Server verfügbar.
 
Also weiter:
Nachdem ich das Programm immer hübscher gemacht habe :-) kann man sehr schön an einer IE session reproduzieren, dass zwei (am Tag vielleicht noch mehr- muss ich mal prüfen) Pseudo-Sessions mit unabhängigen $_Session Variablen aber gleicher Session ID laufen.
Wenn die zweite Session losgeht, verliere ich daher alle Inhalte des Arrays.

Die beiden Sessions arbeiten dann unabhängig weiter, und wechseln immer mal hin und her. Interessant ist, dass das Wechseln jedesmal mit einem kurzen Hänger in der Seite vor sich geht, als ob gerade Last auf dem Server ist.

Alles zusammen ergibt sich das Bild, dass dort irgenein Load-Balancing Mechanismus läuft, der mal die PHP Session von einem auf einen anderen Server wechselt. Beim ersten Wechsel auf einen neuen Server ist halt das $_Session Array leer. Vielleicht wird die Last am Tag noch weiter verteilt, so dass ich noch öfter meine Varablen verliere.

Das ist natürlich ziemlich blöd, jetzt muss ich die $_Session mit einem Files selber nachbauen, also die PHP -Funktion neu programmieren.

Parallel werde ich bei Strato mal nachfragen.

Vielleicht gibt es noch andere Ansätze Irgend eine geheimnisvolle Variable?
 
Hier ist die Zeile, die mein Problem löst.

session_save_path(dirname(__FILE__).'/sessions/');

Die Session Variablen werden jetzt kontrolliert bei mir abgelegt, auch wenn der Server schwenkt, nimmt er diese Files.

.htaccess file in diesem Verzeichnis nicht vergessen!

Jubel :-D
 
Schön, dass das geklappt hat.

Darf ich noch fragen was für ein Hostingpaket das war?
Bei den 3 Paketen, die ich noch nebenbei betreue gibt es so ein Problem nicht.
 
Zurück