2009-06-11 40 views
1

Ich habe einige grundlegende Code, den ich in den Kopf der jeder Seite, um sicherzustellen, dass der Benutzer angemeldet ist. Ich hoffe, jemand könnte einen Blick darauf werfen und mir einige Vorschläge:Überprüfen Sie, ob der Benutzer angemeldet ist


if ($_SESSION['logged_in'] == 1) { 
     $handle = dbconnect::init; 
     $result = $handle->select()->from('session_id') 
            ->where('session_id=?', $_SESSION['SID']) 
            ->columns('ip'); 
     $check = $result->fetchAll(); 
     if ($check[0]->ip != $_SERVER['REMOTE_ADDR']) { //user has changed networks 
                 // or someone is trying 
                 // to switch cookies on us 
      return false; 
     } 
    } else { 
     return false; 
    }

Vielen Dank!

Antwort

1
function checkLoggedIn() { 
    // Return early if we are not logged in. Also, by using empty we 
    // avoid warnings of the 'undefined index' kind. 
    if (empty($_SESSION['logged_in'])) { 
     return false; 
    } 

    $handle = YourDbClass::getConnection(); 

    $result = $handle->select()->from('session_id') 
           ->where('session_id=?', $_SESSION['SID']) 
           ->columns('ip'); 
    $check = $result->fetchAll(); 
    if ($check[0]->ip != $_SERVER['REMOTE_ADDR']) { //user has changed networks 
                // or someone is trying 
                // to switch cookies on us 
     return false; 
    } 
    return true; 
} 

Ihr Code sieht für mich ziemlich gut aus. Ich habe es in eine Funktion eingepackt, so dass Sie es nicht auf jeder Seite duplizieren müssen, sondern nur Ihre util.php oder was auch immer Sie Ihre Funktionsbibliothek nennen möchten. Dann ruf einfach checkLoggedIn() an. Wenn es false zurückgibt, ist der Benutzer nicht angemeldet und Sie können eine Fehlerseite, einen Exit oder was auch immer senden. Wenn es wahr zurückgibt, können Sie fortfahren.

1

Müssen Sie die Remote-IP aus der Datenbank ziehen? Es wäre einfacher, die Remote-IP in _SESSION zu speichern, anstatt die Datenbank mit einer anderen Abfrage zu belästigen.
Sie können dem Benutzer eine Option zum Deaktivieren dieser Funktion geben, da er möglicherweise über transparente Proxys mit sich ändernden IP-Adressen, z. http://webmaster.info.aol.com/proxyinfo.html sagt:

AOL Mitglieder Anfragen für Internet-Objekte werden in der Regel von der AOL-Proxy-System behandelt. Wenn ein Mitglied mehrere Dokumente für mehrere URLs anfordert, kann jede Anfrage von einem anderen Proxyserver stammen. Da ein Proxy-Server mehrere Mitglieder zu einer Site führen kann, sollten Webmaster keine Annahmen über die Beziehung zwischen Mitgliedern und Proxy-Servern bei der Gestaltung ihrer Website treffen.

nit picky: Sie sollten zuerst testen, ob es mindestens einen Datensatz gibt, bevor Sie versuchen, darauf zuzugreifen. Könnte etwas wie sein:

if (!isset($check[0]) || $check[0]->ip!=$_SERVER['REMOTE_ADDR'])

Verwandte Themen