kullanıcı giriş olup olmadığını kontrol

2 Cevap php

Ben birileri bir göz atın ve bana bazı öneriler verebilir umuyordum içeri ben kullanıcı oturum emin olmak için her sayfanın başlığında yer bazı temel kodu var:


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

Teşekkürler!

2 Cevap

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

Sizin kod bana oldukça iyi görünüyor. Eğer sadece util.php ya da ne olursa olsun işlev kütüphanesi aramak istediğiniz gerektirir, her sayfada çoğaltmak gerek yok ben bir fonksiyon sarılmış. Sonra sadece checkLoggedIn () arayın. False döndürürse, kullanıcı oturum değildir ve bir hata sayfası, çıkış veya her neyse gönderebilir. Doğru döner, devam edebilirsiniz.

Do you have a special need for pulling the remote ip from the database? Would be easier to store the remote ip within _SESSION instead of bothering the database with another query.
You might want to give the user an option to disable this feature as they might have to connect to your server through transparent proxies with changing ip addresses, e.g. http://webmaster.info.aol.com/proxyinfo.html says:

AOL Members' requests for internet objects are usually handled by the AOL Proxy system. When a member requests multiple documents for multiple URLs, each request may come from a different proxy server. Since one proxy server can have multiple members going to one site, webmasters should not make assumptions about the relationship between members and proxy servers when designing their web site.

nit seçici: You should ilk test bunu erişmeye çalıştığınızda önce en az bir kayıt varsa. Gibi bir şey olabilir:

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