PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Session wird zu früh beendet ...


sk4ter
14.11.2007, 18:32:29
Hallo,

Habe ein Problem mit em Session System meines Browsergames.

Aufbau
1. Auf der Startseite gibt es ein Login Formular, mit dem man sich ins Spiel einloggen kann.

2. Gibt man seine Daten ein, so wird man zur Login Seite weitergeleitet. Auf dieser Seite wird nun die Session mit Daten befüllt. Anschliesend wird man zum Spiel weitergeleitet. Dabei wird die Session folgendermaßen mitgeschickt: "index.php?". SID .""

3. Nun gibt es im Spiel eine Login Überprüfung (Session soll 1 Stunde gültig sein). Hier der Code davon:

// Allgemeiner Login korrekt?
if(isset($_SESSION['usr_id']) AND !empty($_SESSION['usr_id'])
AND isset($_SESSION['usr_pw']) AND !empty($_SESSION['usr_pw'])
AND isset($_SESSION['usr_level']) AND $_SESSION['usr_level'] != ""
AND isset($_SESSION['usr_nick']) AND !empty($_SESSION['usr_nick'])
AND isset($_SESSION['this_settle'])){

// Session abgelaufen
if($_SESSION['visitor_ip'] != $_SERVER['REMOTE_ADDR'] OR $_SESSION['data_login_timestamp'] < (time() - 60*GAME_CONFIG_SESSIONTIME)){
header("Location: ../index.php?". SID ."&p=message&num=2");
exit;
}
}
// Nicht korrekt eingeloggt
else {
header("Location: ../index.php");
exit;
}


4. Folgende Session Einstellungen werden bei jeder Seite ausgeführt:

ini_set('session.use_cookies', 0);
ini_set("session.gc_maxlifetime", 3600);
ini_set("session.gc_divisor", 100);
ini_set("session.gc_probability", 100);

session_start();


Problem
Normalerweise müsste die Session nun 1 Stunde bestehen. Allerdings wird die Session nun bei einigen Spieler vor dieser Zeit einfach beendet (unregelmäßig). Also die erste "else" Anweisung wird ausgeführt und man wird auf die Startseite weitergeleitet.

Nun habe ich absolut keine Ahnung woran das liegen könnte.

Weitere Informationen
- Das selbe Session Script funktionierte mit einem anderen Code (Anderes Projekt) ohne Probleme. Dort war die Session Daten Menge allerdings um einiges kleiner. Bei dem genannten Browsergame hat die Session eine Größe von ca. 2kb (ca. 30 Werte).
- Auf dem selben Server ist ein Forum installiert (Wotlab). Dort funktionieren die Sessions ohne Probleme

defabricator
14.11.2007, 18:46:18
Hast Du mal nachgeprüft, ob eine komplett neue Session gestartet wurde <-> empty($_SESSION) oder ob nur ine der Bedingungen nicht erfüllt ist?else
{
if(!empty($_SESSION))
{
error_log(var_dump($_SESSION, true)."\n", 3, "session.debug.txt");
}
else
{
error_log("empty session\n", 3, "session.debug.txt");
}

header("Location: ../index.php");
exit;
}



Übrigens brauchst Du bei Verwendung von !empty() nicht vorer noch mit isset() testen.

sk4ter
15.11.2007, 18:49:57
Hast Du mal nachgeprüft, ob eine komplett neue Session gestartet wurde <-> empty($_SESSION) oder ob nur ine der Bedingungen nicht erfüllt ist?
Thx für den Code. Habe ihn mal eingefügt.
Es speichert mir die Nachricht "empty session".Also die Session ist aufeinmal komplett leer.

Hm. Wie überprüfe ich am besten, ob eine neue Session gestartet wurde? Aber ich wüsste nicht, wieso aufeinmal eine neue Session gestartet werden sollte.