2009-06-11 5 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에 대해 여러 문서를 요청하면 각 요청은 다른 프록시 서버에서 올 수 있습니다. 하나의 프록시 서버가 하나의 사이트로 이동하는 여러 회원을 가질 수 있기 때문에 웹 마스터는 웹 사이트를 디자인 할 때 회원과 프록시 서버 간의 관계에 대해 가정하지 않아야합니다.

nit picky : 액세스를 시도하기 전에 레코드가 하나 이상 있는지 먼저 테스트해야합니다. 다음과 같이 될 수 있습니다.

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

관련 문제