Also, um gleich zur Sache zu kommen:
Beim Login werden verschiedene Sessionvariabeln erstellt darunter eine die darüber Auskunft gibt in welcher Runde sich der User gerade einloggte diese enthält den String beta3:
$_SESSION["game"] = "beta3";
Der Grund ist zu verhindern, dass wenn sich ein User in der beta3 einloggt, dann in der beta2, er zurückspringt in die beta3 und dann die Sessionsvariabeln der beta2 gesetzt sind (bspw. eine falsche UserId).
Die Prüfung ob sich der User in der "richtigen" Runde befindet wird in einer Methode checkUser der Klasse user geprüft die ihre Daten via setGame, setUserId, ...etc erhält. Das ganze sieht gekürzt so aus:
Das Script übergibt die Daten:
$userObject=new user;
$userObject->setUserid($_SESSION["userId"]);
$userObject->setGame($_SESSION["game"]);
$userObject->checkUser();
Die set Methoden sehen wie folgt aus ($this->game ist private):
function setGame( $tGame ){
$this->game = $tGame;
}
if($this->game != "beta3" || !$this->userId){
header ("Location: ../sites/login.php");
}else{
Nun, er loggt mich aus. Soll heissen ich komme zurück auf die login.php.
Das Hauptproblem ist allerdings wenn ich den Code ändere in:
if($this->game == "beta3" || !$this->userId){
header ("Location: ../sites/login.php");
}else{
Loggt er mich ebenfalls aus. Aber wenn ich mit die($this->game); aufrufe gibt er mir wie er sollte auch beta3 zurück. Achja, es liegt nicht an $this->userId diese ist gesetzt und macht auch keine Probleme. Ich hatte sie getrennt zum Testen und die UserId wurde immer gesetzt.
Momentan habe ich als Übergangslösung das gemacht:
if( $_SESSION["game"] != "beta3" || !$this->userId){
header ("Location: ../sites/login.php");
}else{
Das funktioniert auch problemlos.
Meine Vermutung ist das php ein Problem mit den Konvertierungen hat, ich hatte schon mal davon gehört. Allerdings habe ich hier mal mit intval (natürlich mit Zahl als Wert) und strval versucht was beides nichts brachte.