проверить, вошел ли пользователь в систему - PullRequest
1 голос
/ 11 июня 2009

У меня есть некоторый базовый код, который я помещаю в заголовок каждой страницы, чтобы убедиться, что пользователь вошел в систему. Я надеялся, что кто-нибудь может взглянуть на него и дать мне несколько советов:


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

Спасибо! * * 1004

Ответы [ 2 ]

1 голос
/ 11 июня 2009

Есть ли у вас особые потребности для извлечения удаленного IP из базы данных? Было бы проще хранить удаленный IP-адрес в _SESSION вместо того, чтобы беспокоить базу данных другим запросом.
Возможно, вы захотите дать пользователю возможность отключить эту функцию, поскольку им может потребоваться подключиться к вашему серверу через прозрачные прокси с изменением IP-адресов, например, http://webmaster.info.aol.com/proxyinfo.html говорит:

Запросы членов AOL на интернет-объекты обычно обрабатываются системой AOL Proxy. Когда участник запрашивает несколько документов для нескольких URL-адресов, каждый запрос может поступать с другого прокси-сервера. Поскольку у одного прокси-сервера может быть несколько участников, заходящих на один сайт, веб-мастера не должны делать предположений об отношениях между участниками и прокси-серверами при разработке своего веб-сайта.

nit picky: прежде чем пытаться получить к нему доступ, сначала нужно проверить, есть ли хотя бы одна запись. Может быть что-то вроде:

if ( !isset($check[0]) || $check[0]->ip!=$_SERVER['REMOTE_ADDR'] )
1 голос
/ 11 июня 2009
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, вы можете продолжить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...