Remote addr en sessies

Status
Niet open voor verdere reacties.

5blabla5

Gebruiker
Lid geworden
27 apr 2009
Berichten
485
Goeiemiddag!

Ik heb wat problemen met een script waar ik zo niet echt de oorzaak van zie... In het script vraag ik om $ip te vullen met $_SERVER['REMOTE_ADDR'], maar dat doet 'ie niet. Hierdoor vult de database zich ook niet, en zal check.php je direct weer uitloggen.

login.php
PHP:
<?php
    
    $showform = TRUE;
    
    // Controleer of de bezoeker is ingelogd of niet
    if(!isset($_SESSION['id'])) {
        // Controleer of er een formulier is verstuurd
        if($_SERVER['REQUEST_METHOD'] == 'POST' || isset($_POST['submit'])) {
        
            // Controleer of alle velden zijn meegestuurd
            $errors = array();
            if(empty($_POST['naam'])) {
                $errors[] = 'Je bent vergeten je naam in te vullen!';
            }
            if(empty($_POST['naam'])) {
                $errors[] = 'Je bent vergeten je wachtwoord in te vullen!';
            }
            
            if(count($errors) === 0) {
                
                // Verzamel alle nodige gegevens
                $gebruikersnaam = mysql_real_escape_string(trim($_POST['gebruikersnaam']));
                $wachtwoord     = mysql_real_escape_string(trim(hash('sha512', $_POST['wachtwoord'])));
                
                // Controleer gebruikersnaam en wachtwoord combinatie
                $sql            = mysql_query('SELECT * FROM users WHERE gebruikersnaam="'.$gebruikersnaam.'" AND wachtwoord="'.$wachtwoord.'"');

                if(mysql_num_rows($sql) == 1) {
                    
                    // Verwerk resultaten
                    $row = mysql_fetch_assoc($sql);
                    
                    // Verzamel echte gegevens
                    $gebruikersnaam = $row['gebruikersnaam'];
                    $id             = $row['id'];
                    $habbonaam      = $row['habbonaam'];
                    $level          = $row['level'];
                    $ip             = $_SERVER['REMOTE_ADDR']; // // // // // // PROBLEEM HIER
                    $lastlogin      = date('d-m-Y H:i:s');
                    
                    // Start sessie in database
                    mysql_query('INSERT INTO sessions (userid, ip, tijd) VALUES ("'.$id.'", "'.$ip.'", NOW())');
                    
                    // Update user data
                    mysql_query('UPDATE users SET lastlogin="'.$lastlogin.'", karma=karma+1 WHERE gebruikersnaam="'.mysql_real_escape_string($gebruikersnaam).'"');

                    // Controleer of gebruiker clublid is
                    $sql = mysql_query('SELECT * FROM clublid WHERE datum < CURRENT_DATE - INTERVAL 30 DAY AND id='.$id.'');
                    if(mysql_num_rows($sql) == 1) {
                        mysql_query('DELETE FROM clublid WHERE id='.$id.'');
                        mysql_query('UPDATE leden SET level=1 WHERE id='.$id.'');
                    }                    
                    
                    // Maak sessie variabelen aan
                    $_SESSION['id']                = $id;
                    $_SESSION['naam']              = $gebruikersnaam;
                    $_SESSION['habbonaam']         = $habbonaam;
                    $_SESSION['ip']                = $ip;
                    
                    if($level == 8) { 
                    $_SESSION['administrator']     = 1;
                    }
                    if($level == 1) { 
                    $_SESSION['lid']               = 1;
                    }
                    
                    // Inloggen succesvol, dus formulier verbergen
                    $showform = FALSE;
                    
                    // Inloggen succesvol, dus we gaan terug naar home.php
                    header('Location: home.php');
                } else {
                    $errors[] = 'Gebruikersnaam/wachtwoord klopt niet!';
                }
            }
            
            // Fouten laten zien
            if(count($errors) != 0) {
                echo '<ol>';
                foreach($errors as $error) {
                    echo '<li>'.$error.'</li>';
                }
                echo '</ol><br />';  
                
                $showform = TRUE;
            }
        }
    } else {
        echo 'In ons systeem sta je nog als aangemeld, log uit om verder te gaan!';
        $showform = FALSE;
    }
    
    if($showform) {
?>
<img src="/v3/images/images/dino.gif" align="right" alt="" />
<form method="POST">
    Gebruikersnaam:<br />
    <input style="width: 140px;" type="text" name="naam" />
    <br /><br />
    Wachtwoord:<br />
    <input style="width: 140px;" type="password" name="wachtwoord" />
    <br />
    <font color="red">Gebruik niet je Habbo wachtwoord!</font>
    <br /><br />
    <input type="submit" name="submit" value="Inloggen" />
</form>
<?php
    }
?>

check.php
PHP:
<?php
	
	if(isset($_SESSION['id'])) {
	
		$sql = mysql_query('SELECT * FROM sessions WHERE userid="'.$_SESSION['id'].'" AND ip="'.$_SERVER['REMOTE_ADDR'].'" AND valid="TRUE"');
		if(mysql_num_rows($sql) == 1) {
		
			$row = mysql_fetch_assoc($sql);
			
			if($_SERVER['REMOTE_ADDR'] == $row['ip'] && $_SERVER['REMOTE_ADDR'] == $_SESSION['ip'] && $row['ip'] == $_SESSION['ip']) {
			
				mysql_query('UPDATE sessions SET tijd="'.time().'" WHERE userid="'.$_SESSION['id'].'" AND ip="'.$_SERVER['REMOTE_ADDR'].'" AND valid="TRUE"');

			} else {

				mysql_query('UPDATE sessions SET valid="FALSE" WHERE userid="'.$_SESSION['id'].'" AND ip="'.$_SERVER['REMOTE_ADDR'].'" AND valid="TRUE"');
				$_SESSION = array();
				session_destroy();
				
			}
		
		} else {
		
			mysql_query('UPDATE sessions SET valid="FALSE" WHERE userid="'.$_SESSION['id'].'" OR ip="'.$_SERVER['REMOTE_ADDR'].'" AND valid="TRUE"');
			$_SESSION = array();
			session_destroy();
			
		}
		
	}

?>

Misschien kan een van jullie het probleem zien?
 
heb je al eens echo $ip gedaan na regel 37?
dan kun je zien of de string wel of niet gevuld wordt.
echo je query eens, kun je zien hoe die opgebouwd is.
Ik zou de query eens controleren door hem uit te voeren in PhpMyAdmin.
 
Het probleem is dat ik hem niet kan echoen... Ik werk in andermans systeem, en op een of andere manier wordt de pagina direct doorgestuurd naar een ander (dus ik krijg geen debug informatie te zien). Op lijn 71 staat wel die header location code, maar als ik deze weghaal, dan stuurt ie hem alsnog door...
 
In plaats van de header() even een die(), dan wordt de rest van de code niet uitgevoerd ;)
 
Het probleem is inmiddels al 2 dagen geleden opgelost, en de oplossing lag in iets heel vreemds: degene bij wie ik het inlogsysteem verving, had een dubbel inlogsysteem. Doordat ik niet alle rechten had in de ftp, kon ik dat niet zien.

Toch bedankt voor de hulp!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan