Intereting Posts
Получение списка файлов по папке на SDK накопителя Обнаружение конфликтов перекрытия событий календаря с использованием PHP Внедрение нового Invisible reCaptcha из Google mysqli auto увеличил первичный идентификатор, который был сгенерирован Как определить, удалось ли выполнить запрос на обновление MySQL, когда данные, переданные в запросе, такие же, как и в базе данных? Исключить строку для использования в почте () Система регистрации PHP не будет работать (phpmyadmin, wampserver) Вставить автоматически увеличивающийся идентификатор с помощью подготовленных операторов Проверка формы – стандартное решение? Как я могу объединить массивы PHP? Получение заголовков и метатег с внешнего сайта Как работает эта библиотека PHP nonce? Извлечь имена полей формы PDF из формы PDF У вставки codeigniter вставки_statch () с тысячами вставок нет пропущенных записей Как получить дату (например, как 2013-06-02) в прошлом на основе входных чисел дней (например, как 230, 20 или 360 или сколько угодно дней) в PHP?

проверить, зарегистрирован ли пользователь

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

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

Благодаря!

Solutions Collecting From Web of "проверить, зарегистрирован ли пользователь"

 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, вы можете продолжить.

У вас есть особая потребность в том, чтобы вытащить удаленный 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'] )