Einzelnen Beitrag anzeigen
  #5  
Alt 01.08.2009, 16:17:55
SevenTeen SevenTeen ist offline
Anfänger
 
Registriert seit: Aug 2009
Alter: 33
Beiträge: 6
AW: Session Problem

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ß

Geändert von vt1816 (01.08.2009 um 19:18:18 Uhr)
Mit Zitat antworten