2009-06-11 17 views
1

私は、すべてのページのヘッダーにユーザーがログインしていることを確認するための基本コードをいくつか持っています。私は誰かがそれを見て、私にいくつかの提案を与えることを望んでいました:ユーザーがログインしているかどうかを確認


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; 
    }

ありがとうございます!

答えて

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; 
} 

あなたのコードは私にはかなりよく見えます。私はそれを関数にラップするので、すべてのページでそれを複製する必要はありません。単にutil.phpや関数ライブラリを呼びたいものを必要とします。次に、checkLoggedIn()を呼び出します。 falseを返すと、ユーザーはログインしていないので、エラーページを送信したり、終了したりすることができます。 trueを返す場合は、続行できます。

1

データベースからリモートIPを引き出す特別な必要がありますか?別のクエリでデータベースを悩ますのではなく、_SESSION内にリモートIPを格納する方が簡単でしょう。
IPアドレスを変更して透過的なプロキシを使用してサーバーに接続しなければならない場合があるため、この機能を無効にするオプションをユーザーに与えることができます。 http://webmaster.info.aol.com/proxyinfo.htmlさんの言葉:

AOLメンバーのインターネットオブジェクトに対するリクエストは、通常、AOLプロキシシステムによって処理されます。メンバーが複数のURLに対して複数の文書を要求する場合、各要求は異なるプロキシサーバーから来る場合があります。 1つのプロキシサーバーで複数のメンバーが1つのサイトにアクセスできるため、Webマスターは、Webサイトを設計する際に、メンバーとプロキシサーバーの関係について前提を取ってはいけません。

nit picky:アクセスしようとする前に、少なくとも1つのレコードがあるかどうか最初にテストする必要があります。次のようなものがあります:

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

関連する問題