Hier die problematische Login.php:
PHP-Code:
function login() {
if($_REQUEST['login']) {
db_connect();
//Strip ' Using Function -> =
$_REQUEST['l_username'] = mysql_real_escape_string($_REQUEST['l_username']);
$_REQUEST['l_password'] = mysql_real_escape_string($_REQUEST['l_password']);
//Look if user is in DB
$query = "SELECT * FROM u_users WHERE username='".$_REQUEST["l_username"]."' and password=sha1('".$_REQUEST["l_password"]."') and activated = 'JA'";
$result = mysql_query($query);
//Check result
if (!$result) {
echo "Interner Fehler beim Einloggen! Result = Negative!";
db_close();
exit;
}
$num = mysql_num_rows($result);
if ($num > 0){
session_unset(); //Versuch alle alten Session-Variablen zu leeren
session_destroy(); //Versuch alle alten Sessions zu schließen
session_id(rand_str()); //Erstellen einer neuen sID
session_start(); //Starten der neuen Session mit neuer sID
$_SESSION['user'] = $_REQUEST['l_username'];
$_SESSION['ID'] = get_ID(); //Funktion die die ID des Users zurückgibt (PK in der Tabelle)
$_SESSION['perm'] = true; //Permission zum weiterleiten auf ingame.php
$_SESSION['time'] = time(); //Zeitstempel für ablauf einer Session (später)
db_connect();
$query = "UPDATE u_users SET last_session_time='".$_SESSION['time']."', last_session_id='".session_id()."' WHERE ID='".$_SESSION['ID']."'";
$session = mysql_query($query);
if(!$session) { echo "Abfrage: 'session':'UPDATE' konnte nicht ausgeführt werden: " . mysql_error(); exit; }
echo "<span style='color:#009900;'>Erfolgreich validiert! <a href='ingame.php'>Hier Klicken...</a></span>";
}
else {
$_SESSION['perm'] = false;
echo "Sie haben ein falsches Passwort eingegeben oder der Benutzername existiert nicht!";
db_close();
exit;
}
session_write_close();
db_close();
}
}
Hier die heikle Abfrage in der Ingame.php bevor das Spiel angezeigt wird:
PHP-Code:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="styles/ingame.css" />
<title>Browsergame</title>
</head>
<body>
<?php
if($_SESSION['perm'] == true) {
require_once('functions/functions.php');
db_connect();
//Check if session valid +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
echo "Browser sID:".session_id();
echo "<br />Datenbank sID:".get_last_session_id();
/*Problem: Man meldet sich mit dem gleichen Account ein 2. Mal ein. Rein theoretisch wird durch die Programmierung jedem Tab(oder Fenster)
mit dem Spiel eine eigene Session zugewiesen. Ist auch so. Siehe Ausgabe oben.
Sobald ich aber das 1. Fenster refreshe (nach Veränderung der Session ID durch das 2. Einloggen im 2. Tab) nimmt sie alte Session ID den
Wert der neuen an!! WARUM??? (Kann somit nicht auf Änderung abfragen und 2. Einloggen verhindern)
*/
if(session_id() != get_last_session_id()) {
echo "<div align='center' class='error'><br /><br />Ihre Sitzung wurde überschrieben! Bitte loggen Sie sich erneut ein!<br /><br /><a href='index.php'>Zurück zur Startseite</a></div>";
session_unset();
session_destroy();
exit;
}
//Check if Session expired +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$SESSION_TIME = 1800; //1800 seconds/SESSION
if(time() > get_last_session_time()+$SESSION_TIME) {
echo "<div align='center' class='error'><br /><br />Ihre Sitzung ist abgelaufen! Bitte loggen Sie sich erneut ein!<br /><br /><a href='index.php'>Zurück zur Startseite</a></div>";
session_unset();
session_destroy();
exit;
}
//Get Users ONLINE +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$online = users_online();
//Get general information like the ID, scores, the rank, friends, enemies ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$info = get_general_info();
$punkte = $info[0];
$rang = $info[1];
$freunde = $info[2];
$feinde = $info[3];
//Get game information like resources, population, resource-border +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$game = get_resources();
$holz = $game[0];
$nahrung = $game[1];
$stein = $game[2];
$eisen = $game[3];
$muenzen = $game[4];
$population = $game[5];
$lager = $game[6];
?>
//...
//... Rest des Spiels... hauptsächlich HTML ...
Problematisch ist hier in der ingame.php nur der Teil: "//Check if session valid"
[mod: link entfernt]
Ihr seht oben in der ingame.php den aktuellen sID Status.
Einfach mit admin einloggen, danach mit RTG_Leks... und darauf den admin mal refreshen
Hoffe das hilft, gruß