Codeigniter один сайт войти - PullRequest
       1

Codeigniter один сайт войти

0 голосов
/ 17 октября 2011

Я пытаюсь получить его, поэтому, если я войду в систему с 1 части моего сайта, он также войдет и в другие части.

Некоторые заметки:

  • Все логины подключаются к одной базе данных ... назовем это db1
  • Таблица сайта 1 - phpfox
  • Таблица сайта 2 - это vbulletin
  • Сейчас он успешно входит в phpfox, но я не могу понять, как войти в систему на форумах ... Я добавил несколько строк кода ниже, чтобы попытаться сделать это, но я не могу понять это. из:
  • Проблема в том, что я должен продолжать входить в каждую часть моего веб-сайта (используя одно и то же имя пользователя и пароль)

Вот мой текущий код:

function login($username, $password, $passClean = null)
{

    $this->faildLogins = new DB_FaildLogins();

    $ip = $this->input->ip_address();

    $faildLogins = $this->faildLogins->getFaildLoginsByIp($ip);

    if($faildLogins){
        if($faildLogins->bannedTime > 0){
            $timeElapsed = ($faildLogins->lastTryDate + $faildLogins->bannedTime)-time();
            if($timeElapsed > 0){
                return sprintf('Your ip (%s) was banned for %s please try again after expire ban time!', $this->input->ip_address(), seconds2HumanTimeFormat($timeElapsed));
            }
        }
    }

    $result = $this->user_model->get_login_info($username);

    if ($result) {
        if ($result->status == 'pending') {
            return 'INACTIVE';
        }

        if ($result->status == 'rejected') {
            return 'REJECTED';
        }   


        if ($password === $result->password) {
            $this->CI->session->set_userdata(array('id'=> $result->id));

            $this->user_model->addUserLogin($result->id);

            $faildLogins = $this->faildLogins->getFaildLoginsByIp($ip);
            if($faildLogins){
                $this->faildLogins->resetFaildLoginToIp($ip);
            }
            return TRUE;

        // If passwords don't match
        } else {

        @mysql_connect('localhost', 'db1', 'db1_password') or die ("Can't connect to DB!");
        @mysql_connect('localhost', 'db1', 'db1_password', true) or die ("Can't connect to DB!");
        @mysql_select_db('phpfox') or die ("Can't select DB!");
        @mysql_select_db('vbulletin') or die ("Can't select DB!");

            $phpFoxUser = mysql_fetch_array(mysql_query("SELECT * FROM `phpfox_user` WHERE `user_name` = '{$username}'"), MYSQL_ASSOC);

            if($phpFoxUser['user_name'] == $username AND 
                    $phpFoxUser['email'] == $result->email AND
                    md5(md5($passClean).md5($phpFoxUser['password_salt'])) == $phpFoxUser['password']) {

                $DBUsers = new DB_Users();
                $rows['id']             = $result->id;
                $rows['password']       = md5($passClean);

                if($DBUsers->saveIt($rows)) {
                    $this->CI->session->set_userdata(array('id'=> $result->id));
                    return TRUE;
                } else {
                    $this->faildLogins->addFaildLoginToIp($ip);
                    return FALSE;
                }
            } else {
                $this->faildLogins->addFaildLoginToIp($ip);
                return FALSE;
            }
        }

    } else {
        @mysql_connect('localhost', 'db1', 'db1_password') or die ("Can't connect to DB!");
        @mysql_connect('localhost', 'db1', 'db1_password', true) or die ("Can't connect to DB!");
        @mysql_select_db('phpfox') or die ("Can't select DB!");
        @mysql_select_db('vbulletin') or die ("Can't select DB!");

        $result = mysql_query("SELECT * FROM `phpfox_user` WHERE `user_name` = '{$username}'");
        $phpFoxUser = mysql_fetch_array($result, MYSQL_ASSOC);

        if($phpFoxUser['user_name'] == $username AND md5(md5($passClean).md5($phpFoxUser['password_salt'])) == $phpFoxUser['password']) {

            $DBUsers = new DB_Users();
            $rows['username']           = $phpFoxUser['user_name'];
            $rows['password']           = md5($passClean);
            $rows['usergroup']          = 'user';
            $rows['email']              = $phpFoxUser['email'];
            $rows['activationCode']     = md5(time());
            $rows['status']             = 'approved';
            $rows['registerDate']       = time();
            $rows['registerIp']         = $this->input->ip_address();
            $rows['hash']               = uniqid(rand().rand().rand(), true);

            $newUserId = $DBUsers->saveIt($rows);

            if($newUserId) {
                $this->CI->session->set_userdata(array('id'=> $newUserId));
                return TRUE;                    
            } else {
                return false;
            }


        } else {
            $this->faildLogins->addFaildLoginToIp($ip);
            return FALSE;
        }

        //md5( md5($sPassword) . md5($sSalt) )
    }

    $this->faildLogins->addFaildLoginToIp($ip);
    return FALSE;
}

1 Ответ

1 голос
/ 17 октября 2011

Задайте для переменной сеанса нечто уникальное для вашего пользователя, например, идентификатор пользователя.

$_SESSION['UserId'] = $id;

Затем проверьте переменную сеанса в верхней части функции входа в систему.

if (isset($_SESSION['UserId']) // user already logged in
  $ret = 'ACTIVE';

Затем в нижней части вашей функции

return $ret;

Кстати: я бы избавился от множественных возвратов в вашей функции и использовал бы переменную $ ret, как в моем примере.Кроме того, не забудьте удалить переменную сеанса, когда пользователь выходит из системы:

unset($_SESSION['UserId']);

Кроме того, вы можете проверить переменную сеанса вверху любой страницы, для которой требуется зарегистрированный пользователь, и перенаправитьна страницу входа, если она не установлена.

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