Как лучше всего ограничить определенные страницы пользователями, вошедшими в систему только в Codeigniter?

Я создал регистрацию и вход на свой веб-сайт, и вся проверка работает нормально как для регистрации, так и для входа в систему. После того, как пользователь предоставит действительные учетные данные, он / она входит в личный кабинет с приветственным сообщением, в котором говорится: «Привет first_name last_name» ... в основном имя и фамилия берутся из базы данных.

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

Я использовал ci_sessions, которые хранятся в таблице «ci_sessions» в моей базе данных. Session_id, ip_address, user_agent, last_activity и user_data - это столбцы. Так что я предполагаю, что это некоторая форма безопасности, а не хранение файлов cookie только в браузере пользователей. Это еще не все.

В любом случае, прямо сейчас, чтобы запретить кому-либо, кроме зарегистрированных пользователей, получить доступ к моему личному кабинету на сайте, например, http: //example.com/member_area Я использую простой оператор if в моем контроллере для области участника:

if (! $this->session->userdata('first_name'))
    {
    redirect('login');
}

Это проверяет, есть ли у человека, который пытается получить доступ к странице членской зоны, какие-то данные, хранящиеся в user_data в моей таблице ci_sessions, такие как first_name, и если да, то позволяет ему получить доступ к странице, что означает, что он должен был войти в систему и все еще имеют активный сеанс.

Если в базе данных ничего не найдено, они перенаправляются на страницу входа в систему. Я хочу знать, есть ли лучший способ сделать это? Достаточно ли безопасен способ, которым я сейчас занимаюсь?

Ниже мой код модели:

load->library('session');

            if (!$user_id = $CI->session->userdata('user_id')) {
                return FALSE;
            }

            if (!$u = Doctrine::getTable('User')->find($user_id)) {
                return FALSE;
            }

            self::$user = $u;
        }

        return self::$user;
    }


    public static function login($email, $password) {

        // get User object by email
        if ($u = Doctrine::getTable('User')->findOneByEmail($email)) {


            // to ge the mutated version of the input password
            $u_input = new User();
            $u_input->password = $password;

            // password match
            if ($u->password == $u_input->password) {


                $CI =& get_instance();
                $CI->load->library('session');
                $CI->session->set_userdata('user_id',$u->id);
                $CI->session->set_userdata('username',$u->username);
                $CI->session->set_userdata('first_name',$u->first_name);
                $CI->session->set_userdata('last_name',$u->last_name);

                self::$user = $u;

                return TRUE;
            }

            unset($u_input);
        }

        // login failed
        return FALSE;

    }


    public function __clone() {
        trigger_error('No duplicates allowed.', E_USER_ERROR);
    }

}

Все ваши советы приветствуются.

ОБНОВЛЕНИЕ

Как насчет добавления этого в мою модель

$CI->session->set_userdata('logged_in', 'TRUE');

Это в основном добавляет "logged_in" к моим пользовательским данным в сеансе в БД со значением "ИСТИНА". Я хочу знать, есть ли лучший способ сделать это? Достаточно ли безопасен способ, которым я сейчас занимаюсь?

Ниже мой код модели:

load->library('session');

            if (!$user_id = $CI->session->userdata('user_id')) {
                return FALSE;
            }

            if (!$u = Doctrine::getTable('User')->find($user_id)) {
                return FALSE;
            }

            self::$user = $u;
        }

        return self::$user;
    }


    public static function login($email, $password) {

        // get User object by email
        if ($u = Doctrine::getTable('User')->findOneByEmail($email)) {


            // to ge the mutated version of the input password
            $u_input = new User();
            $u_input->password = $password;

            // password match
            if ($u->password == $u_input->password) {


                $CI =& get_instance();
                $CI->load->library('session');
                $CI->session->set_userdata('user_id',$u->id);
                $CI->session->set_userdata('username',$u->username);
                $CI->session->set_userdata('first_name',$u->first_name);
                $CI->session->set_userdata('last_name',$u->last_name);

                self::$user = $u;

                return TRUE;
            }

            unset($u_input);
        }

        // login failed
        return FALSE;

    }


    public function __clone() {
        trigger_error('No duplicates allowed.', E_USER_ERROR);
    }

}

Все ваши советы приветствуются.

ОБНОВЛЕНИЕ

Как насчет добавления этого в мою модель

$CI->session->set_userdata('logged_in', 'TRUE');

Это в основном добавляет "logged_in" к моим пользовательским данным в сеансе в БД со значением "ИСТИНА". Я хочу знать, есть ли лучший способ сделать это? Достаточно ли безопасен способ, которым я сейчас занимаюсь?

Ниже мой код модели:

load->library('session');

            if (!$user_id = $CI->session->userdata('user_id')) {
                return FALSE;
            }

            if (!$u = Doctrine::getTable('User')->find($user_id)) {
                return FALSE;
            }

            self::$user = $u;
        }

        return self::$user;
    }


    public static function login($email, $password) {

        // get User object by email
        if ($u = Doctrine::getTable('User')->findOneByEmail($email)) {


            // to ge the mutated version of the input password
            $u_input = new User();
            $u_input->password = $password;

            // password match
            if ($u->password == $u_input->password) {


                $CI =& get_instance();
                $CI->load->library('session');
                $CI->session->set_userdata('user_id',$u->id);
                $CI->session->set_userdata('username',$u->username);
                $CI->session->set_userdata('first_name',$u->first_name);
                $CI->session->set_userdata('last_name',$u->last_name);

                self::$user = $u;

                return TRUE;
            }

            unset($u_input);
        }

        // login failed
        return FALSE;

    }


    public function __clone() {
        trigger_error('No duplicates allowed.', E_USER_ERROR);
    }

}

Все ваши советы приветствуются.

ОБНОВЛЕНИЕ

Как насчет добавления этого в мою модель

$CI->session->set_userdata('logged_in', 'TRUE');

Это в основном добавляет "logged_in" к моим пользовательским данным в сеансе в БД со значением "ИСТИНА". в моем контроллере для моей «членской зоны» я отредактировал оператор if, чтобы сказать следующее:

if (! $this->session->userdata('logged_in')==TRUE)
{
redirect('login');

}

Если элемент не существует, «чего не будет, если пользователь не вошел в систему», то FALSE будет возвращено, и пользователь будет перенаправлен на страницу входа в систему

Как вы думаете?

или я мог бы даже сделать ИСТИННЫМ что-то секретное, например, dsb453rerfksdhbdsks322. Что-то случайное.

5
задан Abhijit 4 December 2018 в 10:42
поделиться