CI 묻고 답하기

제목 세션 autoload를 특정 컨트롤러에서
글쓴이 multicode 작성시각 2013/07/02 17:02:21
댓글 : 16 추천 : 0 스크랩 : 0 조회수 : 12954   RSS
session을 자동로드해서 사용하고 있습니다.
특정컨트롤러에서 로드가 되지 않게 할수 있는 방법이 있는가요?
 다음글 질문근 한번더 올립니다. (6)
 이전글 모델부분의 비동기처리 가능한가요? (3)

댓글

한대승(불의회상) / 2013/07/02 18:00:48 / 추천 0
^^ 편법이긴 하지만... 아래처럼 하면 될듯..
그냥 세션체크 안하면 되는거 아닌가요?

unset($this->session);

multicode / 2013/07/02 18:09:59 / 추천 0
답변 감사합니다.
제가 원하는것은 세션 오브젝트를 삭제 하는게 아니라 ㅋ 아예 로드가 되지 않게 할려고 하는것입니다.
만약 저렇게 하면 오브젝트는 메모리에서 해제가 되겠지만 컨트롤러가 로드되기전에 세션이 오브젝트가 생성자에 의해 생성이 되면서 바로 DB접속등의 일을 수행하게 되는거 같은데요.

아 너무 길게 말씀드렸네요 전 그냥 세션이 특정 컨트롤러로 갈때 생성이 되지 않았으면 좋겠어요 ㅠ

한대승(불의회상) / 2013/07/02 18:27:30 / 추천 0
multicode// 그렇게 할 필요가 있나요?
꼭 그렇게 해야 한다면 현재로서는 autoload를 사용하지 않고 필요로 하는 컨트롤러에서만 session 라이브러리를 로드 하는 방법 밖에 없습니다.
들국화 / 2013/07/02 18:27:38 / 추천 0
후크에서나 컨트롤러 생성자에서 처리하면 될듯 하네요...
한대승(불의회상) / 2013/07/02 18:28:56 / 추천 0
들국화// 후크나 생성자에서 한다해도 unset 으로 해제 하는 방법밖에 없을듯 한데...
들국화 / 2013/07/02 18:38:18 / 추천 0
 한대승(불의회상)// 가장 좋은 방법은 필요할때 마다 로드 하는것 이겠지만 후크포인트가 여러단계가 있으니 처리 할수도 있을듯 한데요. 시스템파일을 수정해야 할수도 있을듯 하지만..... 질문하신분이 원하는 기능이 중요한건지 좀더 자세한 설명이 필요 할듯 하네요.
한대승(불의회상) / 2013/07/02 18:56:51 / 추천 0
들국화// autoload 이후에 hook을 거는거 같네요.
지적하신대로 코어를 수정해야 할 거 같은데 배보다 배꼽이 더 커질 상황...
multicode / 2013/07/02 20:47:22 / 추천 0
앗 의도치 않은 분쟁거릴 만든거 같아 죄송스럽네요 -_-;;;
왜 이렇게 해야 하냐면요. 페이지뷰가 굉장히 많은 페이지가 있습니다.
이 페이지는 디비접속은 필요하나 세션여부가 필요치 않은 상황입니다.
그래서 불필요한 쿼리를 제거 하기 위해 세션을 오토로드에서 해제시키고 싶은것입니다.

이런 이유로 질문을 드렸네요. 사실 저도 코어쪽을 보면서
후킹으로 라우팅까지만 로드 됐을때 처리를 하면 될거 같아 보이긴 합니다.
뭐... 그렇숩니다..;;;

multicode / 2013/07/02 20:57:18 / 추천 0
 그냥 이렇게 처리 했습니다.
autoload.php 파일에 
$CI =& get_instance();
if ($CI->router->class == '특정컨트롤러클래스') $autoload['libraries'] = array('database');
else $autoload['libraries'] = array('database', 'session');
지저분하지만 되는거 같습니다. ㅠㅠ
변종원(웅파) / 2013/07/02 20:59:46 / 추천 0
db세션을 쓰시는 것 같네요. database로드 하면 세션은 자동 로드됩니다.
 
1. db 세션을 안쓰시고 개별로 세션 로드하여 사용

2. 코어 건드리기

방법이 있겠네요.
multicode / 2013/07/02 21:08:37 / 추천 0
웅파// 음... 이상하네요. 방금 프로파일러로 찍어 보니 세션쿼리는 안날리는거 같습니다.
고로 라이브러리가 로드가 되지 않았다는 얘기가 아닐가요 ㅎ;


변종원(웅파) / 2013/07/02 21:29:44 / 추천 0
반대로였나 보네요. 기억이 가물가물하네요. ^^;
들국화 / 2013/07/03 09:44:13 / 추천 0
대용량이고 빠른응답이 요구된다면 프레임워크를 안테우는것도 방법 입니다.
클래스도 사용하지 않으면 더 빠르구요.
아무래도 유지보수에 불편함은 감수해야 겠지요...
들국화 / 2013/07/03 09:48:56 / 추천 0
한대승(불의회상)// 님 잘 몰라서 질문드리는 건데요.
메뉴얼을 보니 Hook points 가 여러단계가 있잖아요... 그중에서 첫단계..

pre_system  단계에서도 autoload가 실행된 단계 인가요?
설명에는 : 시스템 작동초기입니다.벤치마크와 후킹클래스들만 로드된 상태로서, 라우팅을 비롯한 어떤 다른 프로세스도 진행되지않은 상태입니다.

이렇케 되어 있어서요..
multicode / 2013/07/03 13:39:37 / 추천 0
 들국화 // 저한테 물어본건 아니자만 제가 어제 코어를 조금 살펴봐서

pre_system  단계에서는 autoload가 실행되지 않는 상태입니다.
코어를 보니 _call_hook을 실행하는 단계가 메뉴얼보다 좀 더 있더군요.

메뉴얼 대로라면 pre_controller 이 호출되기전에 그러니깐 컨트롤러가 생성될때 호출되는거 같습니다.

대충 살펴봐서 -_-;