CI 묻고 답하기

제목 세션 라이브러리 관련하여 질문드립니다.
글쓴이 물결 작성시각 2013/10/18 12:00:30
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 19136   RSS
안녕하세요 ^^;

로그인 세션유지와 관련하여 궁금한 부분이 있어서 질문을 드립니다.


config 설정은 대략 이렇습니다....
                                                                               
$config['sess_expiration']      = 7200;   
$config['sess_expire_on_close'] = TRUE;     
$config['sess_encrypt_cookie']  = FALSE;    
$config['sess_use_database']    = TRUE;  
$config['sess_match_ip']        = FALSE;           
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update']  = 60*60*24*365; 

포럼에 글을 참고해서 로그인 유지를 체크하면 
$this->session->sess_expiration = 60*60*24*365; 
$this->session->sess_expire_on_close = FALSE; 
이런식으로 컨트롤러에 설정해줘서 유지될수 있도록 변경했고, 쿠키에 변경된 값으로 반영되는 부분은 확인했습니다.

 CI system 세션 라이브러리에 보면,
177라인 쯤에
        if (($session['last_activity'] + $this->sess_expiration) < $this->now) 
        {   
            $this->sess_destroy();
            return FALSE;  
        }   
이런 부분이 있던데, CI에서 세션 유지를 할 때, DB를 사용하더라도 사용자 PC에 쿠키를 굽고 해당쿠키에 값을 참고 DB와 매칭시켜 세션을 유지하고 있는 것으로 알고 있는데요

위의 시스템라이브러리 코드에서는 쿠키의 만료시간값을 가지고 비교하는 부분이 없네요 ;;
유지시에 sess_expiration은 쿠키에만 반영되고 시스템라이브러리에서 사용하는 sess_expiration 값은 config 파일을 참조해서 받아오는것 같습니다. 

결국 위의 코드대로라면 로그인유지와 상관없이 config파일의 sess_expiration설정대로 2시간 이후에는 세션이 풀리게 되는거 같은데, 이 경우에서는 위에 시스템라이브러리 코드를 변경해서 사용하는게 맞나요?


시스템 라이브러리 코드 변경해서 사용하려다가 혹시 제가 잘못 알고있는 부분이 있나해서 조언을 구합니다.

답변부탁드려요 ~ 감사합니다 ^^;
 

 다음글 리눅스에서 view페이지 설정 (2)
 이전글 Youtube 뒤 URL 처럼 하려면 어떻게해야할까요. (5)

댓글

변종원(웅파) / 2013/10/18 13:23:53 / 추천 0
db세션을 사용하시니 db 내용 보시면 last_activity 시간이 있습니다.

그걸로 177라인에서 비교합니다. db 세션을 사용하지 않으면 사용자 쿠키에 담기겠죠.

뭔가 잘못 생각하시는 것 같은데 저도 헷갈리네요. ^^

config의 세션 업데이트 타임과 session expiration은 다른 겁니다. (강좌게시판 config 글 참고)
물결 / 2013/10/18 13:36:05 / 추천 0
우선 답변 감사드립니다 ^^
 last_activity => 마지막 방문시간
$this->expriration :  config['sess_expiration'] 의 값 ( 7200)
$this->now : 세션을 읽는 시점의 현재시간
으로 알고있는데요, 세션을 설정할 때 
$this->session->sess_expirati 이런식으로 값을 365일로 늘려주고 있습니다.
하지만 위, 조건식에서는 세션을 읽는시점에서는 365일이라는 값에 대해 무시고하고 체크하도록 되어 있는것같아서 궁금해서 올려봤습니다 ^^;;
letsgolee / 2013/10/18 20:04:56 / 추천 0
 $this->session->sess_expiration 의 값을 직접적으로 건드리는 것은 좋은 방법이 아닙니다. 그리고 config에서 설정한 sess_expiration값은 쿠키와 세션 모두 적용됩니다. 예를 들어 쿠키에서는 Sesssion.php파일 665라인 정도에 보면 다음의 코드를 볼 수 있습니다:
$expire = ($this->sess_expire_on_close === TRUE) ? 0 : $this->sess_expiration + time();
코드를 계속 보면 이 $expire값이 쿠키를 구울 때 사용됩니다. 또한 세션에 대해서는 물결님이 언급한 177라인에서 보입니다. 

그렇다면 config에서 설정한 값이 어떻게 적용되냐구요?  __construct합수를 보면 약 67라인에서 $param값이 없으면 config에서 값을 가져오도록 되어 있음을 볼 수 있습니다. 

따라서 expiration 값을 늘리고 싶다면 세션생성시 두번째 파라미터값을 주면 됩니다. 다음의 방법을 사용하면 됩니다:
$this->load->library('session', array(
    'sess_expiration'=>60*60*24
));
위의 예는 24시간동안 즉 하루동안 세션을 유지하고자 할 때입니다. 그런데 보안상 세션이나 쿠키는 길게 잡으면 좋을 게 하나도 없습니다. codeigniter는 기본적으로 7200초 즉 60*60*2이므로 2시간으로 되어 있습니다.

그리고 잘 알지 못한다면 코어는 건드리지 않는 것이 좋습니다. 따라서 system폴더의 내용들은 건드리지 말고 사용법을 잘 숙지하도록 하는 것이 좋습니다. 반복해서 메뉴얼을 읽어보시고 시간날 때마다 참조하시면 됩니다.