생성자에서 함수를 호출 할 때 Codeigniter 뷰가 두 번 실행 됨

분노

codeigniter에서 PHP 앱용 로그인 시스템을 설정하는 방법에 대한 자습서를 따랐습니다. 사용자가 세션 데이터를 가지고있을 때의 논리는 훌륭하게 작동하지만 사용자가 로그인하지 않은 경우 문제가 있습니다 (예 : 잠시 후 페이지를 새로 고칩니다). 생성자에서 functin을 호출 할 때 "not_logged_in"뷰가 두 번 실행됩니다. 다음 코드는 작동하지만 나중에 추가하는 모든 함수에 대해 코드를 추가해야 함을 의미합니다.

class App extends CI_Controller {

 function __construct()
 {
      parent::__construct();



 }
 private function logged_in()
 {

      $is_logged_in = $this->session->userdata('is_logged_in');
      if (isset($is_logged_in) OR $is_logged_in)
      {
           return TRUE;
      }
      else
      {
           $data['title'] = 'Chyba přihlášení';
           $data['main_content'] = 'not_logged_in';
           $this->load->view('includes/template', $data);
           return FALSE;
      }
 }

 function index()
 {
      if($this->logged_in())
      {
           $data['title'] = 'APLIKACE';
           $data['main_content'] = 'app_view';
           $data['userid'] = $this->session->userdata('userid'); //get userid from session
           $this->session->unset_userdata('userid'); //destroy the data
           $this->load->view('includes/template' , $data);
      }
 }


 function logout()
 {
     $this->session->sess_destroy();
     redirect('login');
 }


}

이제 실제 질문은 모든 함수에서 확인하지 않고도 전체 논리를 생성자에 넣는 방법입니다.

Tpojka

APPPATH.'core/MY_Controller.php'파일을 만들고 생성자에 인증 로직을 넣으 십시오 . 모든 컨트롤러에서 해당 클래스를 확장하는 것보다 (인증 로직이 필요합니다).

class MY_Controller extends CI_Controller
{
    public function __construct();
    {
        parent::__construct();
        $this->check_login();
    }

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

        //here should be *AND* instead *OR* logic
        if (isset($is_logged_in) && !empty($is_logged_in))
        {
            return TRUE;
        }
        else
        {
            redirect('login/index');
            exit();
        }
    }
}

Login.php 컨트롤러 :

class Login extends CI_Controller//NOT extending MY_Controller to avoid infinite loop
{
    public function __construct();
    {
        parent::__construct();
    }

    public function index()
    {
        //here is login view
        //and logic of preserving session
        //with redirect to 'app/index' after successful login
    }

    public function logout()
    {
        $this->session->sess_destroy();
        redirect('login');
    }
}

App.php 컨트롤러 :

class App extends MY_Controller//extending MY_Controller to check login status
{
    public function __construct();
    {
        parent::__construct();
    }

    public function index()
    {
        //here is app dashboard view
    }

    public function statistics()
    {
        //here is some other method that requires logged in user
    }
}

또한 Ion_auth 인증 시스템을 확인하여 적합한 지 확인하는 것이 좋습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Angular에서는 * ngFor 루프에서 함수를 호출하고 있으며 한 번만 실행해야 할 때 전체 루프가 두 번 실행됩니다.

분류에서Dev

헤더를 사용할 때 Angular $ http가 두 번 실행 됨

분류에서Dev

pydev로 실행할 때 Pyramid 서버가 첫 번째 호출에서 중지됨

분류에서Dev

C에서 동일한 인쇄 함수를 두 번째 호출 할 때 오류가 발생합니다.

분류에서Dev

콜백 함수가 두 번 호출 됨

분류에서Dev

두 번째 생성자가 C ++에서 호출 됨 (잘못된 출력)

분류에서Dev

PageViewController 대리자 함수가 두 번 호출 됨

분류에서Dev

자바 스크립트 콜백 함수가 두 번 실행 됨

분류에서Dev

메서드를 두 번 호출 할 때 하나의 SVG 구성 요소 만 렌더링 됨

분류에서Dev

'functrace'가 켜져있을 때 쉘 함수가 실행되기 전에 신호를 디버그하는 트랩이 두 번 호출되었습니다.

분류에서Dev

.appendchild가 CKeditor에서 두 번 실행 됨

분류에서Dev

JS 압축 문제-uglifier를 사용할 때 콜백이 두 번 호출 됨

분류에서Dev

onMapReady는 처음 실행할 때 두 번 호출됩니다.

분류에서Dev

sleep ()은 호출 될 때가 아니라 한 번에 모두 실행됩니다.

분류에서Dev

부품 생성자가 두 번 호출 됨

분류에서Dev

keyup이 때때로 두 번 실행 됨

분류에서Dev

모달 대화 상자에서 Hide ()를 호출 할 때 FormClosing이 두 번 실행되는 이유는 무엇입니까?

분류에서Dev

인수가 필요할 때 한 번에 두 개의 스레드를 실행할 수 없습니다.

분류에서Dev

"범위 지정"서비스의 생성자가 두 번 이상 호출 됨

분류에서Dev

IOS에서 X 분에 두 번 이상 함수 호출을 실행할 수 없습니다.

분류에서Dev

양식 유효성 검사시 Javascript 함수가 두 번 실행 됨

분류에서Dev

ProgresDialog가 다른 함수를 두 번 호출 할 때 onPostExecute를 닫지 않습니다.

분류에서Dev

Google 스프레드 시트에서 스크립트를 실행할 때 "스크립트가 초당 너무 많이 호출 됨"발생

분류에서Dev

내 각도 함수가 첫 번째 호출에서 실행되지 않습니다. 두 번째 호출에서만 실행됩니다.

분류에서Dev

AWS Pipeline 오류를 실행할 수 없음 : "PutObject 작업을 호출 할 때 오류가 발생했습니다 (AccessDenied) : 액세스 거부 됨"

분류에서Dev

두 번째 실행시 애플리케이션에 빈 화면이 표시됨 (onDestroy가 호출 된 후)

분류에서Dev

fread를 사용할 때 데이터가 두 번 인쇄 됨

분류에서Dev

AJAX 호출이 예기치 않게 Chrome에서 두 번 실행 됨

분류에서Dev

Python Flask 서버가 두 번 실행 됨-다시 시작되는 원인을 파악할 수 없음

Related 관련 기사

  1. 1

    Angular에서는 * ngFor 루프에서 함수를 호출하고 있으며 한 번만 실행해야 할 때 전체 루프가 두 번 실행됩니다.

  2. 2

    헤더를 사용할 때 Angular $ http가 두 번 실행 됨

  3. 3

    pydev로 실행할 때 Pyramid 서버가 첫 번째 호출에서 중지됨

  4. 4

    C에서 동일한 인쇄 함수를 두 번째 호출 할 때 오류가 발생합니다.

  5. 5

    콜백 함수가 두 번 호출 됨

  6. 6

    두 번째 생성자가 C ++에서 호출 됨 (잘못된 출력)

  7. 7

    PageViewController 대리자 함수가 두 번 호출 됨

  8. 8

    자바 스크립트 콜백 함수가 두 번 실행 됨

  9. 9

    메서드를 두 번 호출 할 때 하나의 SVG 구성 요소 만 렌더링 됨

  10. 10

    'functrace'가 켜져있을 때 쉘 함수가 실행되기 전에 신호를 디버그하는 트랩이 두 번 호출되었습니다.

  11. 11

    .appendchild가 CKeditor에서 두 번 실행 됨

  12. 12

    JS 압축 문제-uglifier를 사용할 때 콜백이 두 번 호출 됨

  13. 13

    onMapReady는 처음 실행할 때 두 번 호출됩니다.

  14. 14

    sleep ()은 호출 될 때가 아니라 한 번에 모두 실행됩니다.

  15. 15

    부품 생성자가 두 번 호출 됨

  16. 16

    keyup이 때때로 두 번 실행 됨

  17. 17

    모달 대화 상자에서 Hide ()를 호출 할 때 FormClosing이 두 번 실행되는 이유는 무엇입니까?

  18. 18

    인수가 필요할 때 한 번에 두 개의 스레드를 실행할 수 없습니다.

  19. 19

    "범위 지정"서비스의 생성자가 두 번 이상 호출 됨

  20. 20

    IOS에서 X 분에 두 번 이상 함수 호출을 실행할 수 없습니다.

  21. 21

    양식 유효성 검사시 Javascript 함수가 두 번 실행 됨

  22. 22

    ProgresDialog가 다른 함수를 두 번 호출 할 때 onPostExecute를 닫지 않습니다.

  23. 23

    Google 스프레드 시트에서 스크립트를 실행할 때 "스크립트가 초당 너무 많이 호출 됨"발생

  24. 24

    내 각도 함수가 첫 번째 호출에서 실행되지 않습니다. 두 번째 호출에서만 실행됩니다.

  25. 25

    AWS Pipeline 오류를 실행할 수 없음 : "PutObject 작업을 호출 할 때 오류가 발생했습니다 (AccessDenied) : 액세스 거부 됨"

  26. 26

    두 번째 실행시 애플리케이션에 빈 화면이 표시됨 (onDestroy가 호출 된 후)

  27. 27

    fread를 사용할 때 데이터가 두 번 인쇄 됨

  28. 28

    AJAX 호출이 예기치 않게 Chrome에서 두 번 실행 됨

  29. 29

    Python Flask 서버가 두 번 실행 됨-다시 시작되는 원인을 파악할 수 없음

뜨겁다태그

보관