как запретить вход на сайт с помощью URL-адреса в codeigniter - PullRequest
0 голосов
/ 17 декабря 2010

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

Я реализовал сеанс для регистрации пациента следующим образом:

function index(){
    $this->is_logged_in();
}   

function log_out(){
    $this->session->sess_destroy();
    redirect('login_controller');   
}

function is_logged_in(){
    $is_logged_in = $this->session->userdata('is_logged_in');

    if(!isset($is_logged_in)||$is_logged_in!= TRUE ){
        redirect('login_controller');
    }else{
        $this->main();      
    }
}

Анонимные пользователи не могут войти в систему, просто набрав имя контроллера следующим образом:

http://localhost/demo_site/index.php/register_controller

Но они могутсделать это следующим образом:

http://localhost/demo_site/index.php/register_controller/search_patient

Человек не может получить доступ, введя имя контроллера, но может войти в систему, введя более длинный URL, чем контроллерКак показано выше.

В чем здесь проблема?Каковы возможные решения ??

Ответы [ 4 ]

8 голосов
/ 17 декабря 2010

Вам нужно будет выполнить проверку входа в конструктор контроллера.

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

2 голосов
/ 17 декабря 2010

Чтобы подтвердить, входит ли проверка входа в систему, поместите echo и exit внутри функции is_logged_in() и проверьте, появляется ли она в случае http://localhost/demo_site/index.php/register_controller/search_patient

Вы, вероятно, делаете проверку входав ваших соответствующих модулях, и поэтому вы пропустили в некоторых случаях.

Лучше определить набор приватных модулей (скажем, в массиве) и выполнить проверку входа в систему непосредственно в переднем контроллере (в одном месте), а не многократно на уровне модулей.

1 голос
/ 18 декабря 2010

Я согласен с НАСТОЯЩИМ. Этот код должен идти в конструкторе. В идеале в базовом классе, который вы используете для расширения всех классов, связанных с администратором или ограниченных. Обычно я использую базовый класс Admin_Controller, который расширяет CI_Controller (2.0) или Controller (1.7.x), а затем создаю свои контроллеры приложений, расширяя контроллер Admin.

1 голос
/ 17 декабря 2010

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

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