CI 묻고 답하기

제목 hook을 사용하여 로그인여부를 검사할려고 하는데 redirect시 문제가 생기네요;
카테고리 CI 2, 3
글쓴이 정수리 작성시각 2017/05/31 18:03:19
댓글 : 4 추천 : 0 스크랩 : 1 조회수 : 17667   RSS

현재 hook의 경우

 

$hook['post_controller_constructor'][0] = array(//로그인 여부 검증
		'class' => 'User_log',
		'function' => 'session_confirm',
		'filename' => 'user_log.php',
		'filepath' => 'hooks'
	);

$hook['post_controller_constructor'][1] = array(//로그 등록
		'class' => 'User_log',
		'function' => 'log_regit',
		'filename' => 'user_log.php',
		'filepath' => 'hooks'
	);

 

 

class User_log
{
	private $CI;

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

		$this->CI =& get_instance();
		$this->CI->load->model('lg/log_m');
		if(!isset($this->CI->ssesion)) {
			$this->CI->load->library('session');
		}

	}

	public function log_regit()//사용자의 로그 등록
	{

		if(!empty($this->CI->session->userdata['name'])) {

			$data['name'] =  $this->CI->session->userdata['name'];
			$data['date'] =  date('Y-m-d');
			$data['time'] =  date('H:i:s');
			$data['browser'] =  $_SERVER['HTTP_USER_AGENT'];
			$data['ip'] =  $_SERVER['REMOTE_ADDR'];
			$data['prev_page'] =  @$_SERVER['HTTP_REFERER'];
			
			$this->CI->log_m->log_up_rg($data);
		}
	}

	public function  session_confirm()//로그인 여부 확인 
	{
		$this->CI->load->helper('url');
		
		if(empty($this->CI->session->userdata['name'])) {

			//redirect('ln/ln_c');

		}
		
	}
	
}

 

hook을 통해 로그인 여부를 통해 session에 name값이 있으면 계속 진행이 되고

 

없을 경우에는 로그인 창으로 보낼려고합니다.

 

그런데 주석 처리한 

 

redirect를 사용하면

 

크롬에서는 리다이렉션이 너무 많다고 페이지가 떠버리고

 

파폭은 페이지 자동바꾸기가 제대로 안됨 페이지가 출력이 되고

 

IE에서는 페이지를 표시 할수없다는 페이지가 출력 됩니다...

 

저부분을 주석처리 하면 정상적으로 잘되구요 ㅜㅜ

 

http://codeigniter-kr.org/bbs/view/tip?idx=12902&page=2&view_category=&lists_style=

 

이 게시글을 참조하여 구현하였는데 저런문제가 발생해버리네요;;

 

redirect의 경로가 되는 controller는

application/controller/ln/ln_c.php 이며

 

해당 로그인 페이지를 출력하는 코드는 

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

		$this->load->library('Log');//로그관련 라이브러리 호출
		$this->load->helper('form');//폼관련 헬퍼 호출
		$this->load->helper('password');//패스워드 헬퍼 함수 호출
	}

	public function index()
	{
	
		$this->load->model('cg/Config_m');
		
		$data['info'] = $this->Config_m->get_name_version();
		
		$this->load->view('ln/login_v', $data);
	}

 

이부분입니다.

 

어떤 부분이 잘못 되어 정상적으로 리다이렉트가 안되는 것일까요?

 다음글 컨트롤러 연결 문제 (1)
 이전글 혹시 티베로 db를 코드이그나이터에서 써보신 분이 계신... (1)

댓글

kaido / 2017/06/01 09:02:49 / 추천 0

후크는 한번만 작동 하는게 아닙니다.

모든 페이지 접근에 매번 작동 합니다.

 

현재 접근 순서를 보면 이런식이 됩니다.

 

메인페이지 접근 > 세션이 없으므로 후크로 이동 > 후크에서 세션이 없으므로 로그인 페이지로 처리 > 로그인 페이지 접근 > 세션이 없으므로 후크로 이동 

 

반복이 됩니다.

정수리 / 2017/06/01 09:17:39 / 추천 0

@kaido

답변 정말 감사합니다

접근 순서가 말씀하신 대로 되다 보니 계속 리다이렉트 계속해서 반복이 되어 버려서 그런거군요;;

그렇다면 제생각에는 로그인페이지에서는  후크가 작동하지 않으면 될것 같은데 메뉴얼을 읽어보니 특정 컨트롤러에서는

후크가 작동하지 않도록 할수가 없는것 같더라구요..

그렇다면 세션을 체크하는 부분의 경우는 따로 함수로 만들어서 호출하는 방식으로 처리하는 방법밖에 없을까요?

kaido / 2017/06/01 09:41:48 / 추천 0

name 세션에 false 값만 넣어서 태워줘도 리다이렉션이 안일어납니다.

혹은 name이 아닌 login_is 같은 체크 값 세션을 만들어서 안에 값을 넣고 체크 해도 됩니다.

해당 세션이 비어 있지만 않다면 후크에서 판단 할때 다시 되돌아 오는 일은 없게 됩니다.

 

혹은 후크에서 로그인 페이지 주소만 제외 한다거나 하는 if문 조건 추가 방법도 있습니다.

정수리 / 2017/06/01 10:53:17 / 추천 0

@kaido

답변감사합니다

말씀하신대로 후크에서 로그인 페이지주소만 제외한다는 if문를 추가하여 처리 하였는데

새로운 문제 발생해버리네요;;

세션값이 없을 경우 리다이렉트되어 로그인 페이지로 돌아와서

다시 로그인을 하면

로그인이 되지 않습니다;;

 

로그인같은 경우 사용자가 아이디와 비밀번호를 입력하고 로그인을 하면 ajax를 통해 사용자의 아이디와 비밀번호를 확인하여

맞을 경우 form을 서브밋하여 로그인을 합니다

 

리다이렉트를 통해 로그인페이지로 돌아와서 로그인을 하면

 

ajax의 에러메시지가 출력이되는데

개발자도구에서 봐보면

ajax호출시 두개의 호출이 됩니다.

POST http://xxx.xx.xx.xx/~landcom/index.php/ln/ln_c/login_confirm(아이디및 비밀번호확인)

GET http://XXX.XX.XX.XX/~landcom/index.php/ln/ln_c(로그인페이지)

 

저두개 모두 응답값을 확인해보면 로그인페이지가 출력되는것이 확인이 되었습니다;

 

POST로 AJAX를 호출하면 리턴값이 TRUE, FALSE 값이 되어야 하는데 로그인페이지를 리턴해버리네요 ;

어떤 부분이 잘못 된것 일까요...