본문 바로가기
개발/PHP

[코드이그나이터 Codeigniter] Codeigniter 로 알아본 redirect location refresh 의 차이

by 언제나초심. 2017. 1. 19.
반응형

1. codeigniter 의 redirect 함수

/system/helpers/url_helper 를 찾을 수 있는데, 


소스 를 살펴보면



function redirect

case 'refresh':
	header('Refresh:0;url='.$uri);
	break;
default:
	header('Location: '.$uri, TRUE, $code);
	break;

로 되어 있다. 결론적으로 볼 때에 php 의 header 함수 를 쓴다는 것을 알 수 있다. 


사이트에서 설명은 https://codeigniter.com/userguide3/helpers/url_helper.html 을 참조


영알못 이므로, 한글화 된 곳 http://www.ciboard.co.kr/user_guide/kr/helpers/url_helper.html 을 참조.


그래도 무슨 소린지 감이 안 온다. 



2. PHP 의 header 함수

그렇다면, 자세한 내용은 http://php.net/manual/kr/function.header.php 을 참조



설명을 보는데, 잘 이해가 안 가는 부분이 있었다. 내가 궁금한 것은 post submit 을 날린 후 와 같은 경우에 히스토리에 남기지 않고 redirect 를 시키는 것이 둘 중 어느것이냐 였는데...



3. 직접 실험

실험을 해보기로 했다. 


실험방법

* 실험방법은 코드이그나이터 에서 페이지에 redirect('/','location') 과 redirect('/','refresh) 를 바꿔가면서 테스트를 해보았다. 




크롬의 경우

* 뒤로가기 버튼 으로 했을 때에는, 둘 다 전 페이지로 넘어가지는 않는다. 

* refresh  : 히스토리 기록 에 직전주소 와 현재주소 가 둘다 남아 있다.

* location : 히스토리 기록 에 직전주소 가 남아있지 않다. 


엣지의 경우

* 뒤로가기 버튼 으로 했을 때에는, 둘 다 전 페이지로 넘어가지는 않는다. 

* refresh  : 검색기록 (히스토리 기록) 부분에 직전주소 로 남아있다. 

* location : 검색기록 (히스토리 기록) 에 직전주소 가 남아있지 않다.


익스플로러11 의 경우

* 뒤로가기 버튼 으로 했을 때에는, 둘 다 전 페이지로 넘어가지는 않는다. 

* refresh  : 히스토리 기록 에 직전주소 와 현재주소 가 둘다 남아 있다.

* location : 히스토리 기록에 직전주소 가 남아있지 않다.



라는 결과를 얻었다. 하면서 헛갈리거나 실수가 있었을 수도 있겠지만.


결과적으로는 내가 원하는 것은 location 이라는 것을 알게 되었다. 



4. 결론

다시 한 번 codeigniter 의 메뉴얼 설명을 읽어보기로 했다. 읽어보면서, 동시에 url_helper 의 redirect 함수 를 천천히 읽어보았다. 


method 인자값으로, auto, refresh, location 을 넘길 수가 있는데. 기본값은 auto 이다. 


auto 를 살펴보면, auto 이면서 서버가 IIS 인 경우에 refresh 로 변경이 된다. 즉, auto 이면서 리눅스 인 경우에는 header location 이 된다는 말이 된다. (메뉴얼 설명으로는 location 이 윈도우 서버 IIS 에서 이상동작 이 있었던 듯 하다)


그렇구나...location 을 적어주거나, 그냥 인자값 없이 redirect('경로') 정도 로만 써주면 될 것 같다. 




5. 결론의 요약


redirect('경로') 를 쓰면 된다. (location, refresh 를 넘길 것 없이)


특별히 기록을 남기려는 경우에만 redirect('경로','refresh') 를 쓰면 된다. 



반응형