제목 | 세션 라이브러리 관련하여 질문드립니다. | ||
---|---|---|---|
글쓴이 | 물결 | 작성시각 | 2013/10/18 12:00:30 |
|
|||
안녕하세요 ^^; 로그인 세션유지와 관련하여 궁금한 부분이 있어서 질문을 드립니다. 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
|
물결
/
2013/10/18 13:36:05 /
추천
0
우선 답변 감사드립니다 ^^
last_activity => 마지막 방문시간 $this->expriration : config['sess_expiration'] 의 값 ( 7200) $this->now : 세션을 읽는 시점의 현재시간 으로 알고있는데요, 세션을 설정할 때 $this ->session->sess_expirati 이런식으로 값을 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폴더의 내용들은 건드리지 말고 사용법을 잘 숙지하도록 하는 것이 좋습니다. 반복해서 메뉴얼을 읽어보시고 시간날 때마다 참조하시면 됩니다. |
그걸로 177라인에서 비교합니다. db 세션을 사용하지 않으면 사용자 쿠키에 담기겠죠.
뭔가 잘못 생각하시는 것 같은데 저도 헷갈리네요. ^^
config의 세션 업데이트 타임과 session expiration은 다른 겁니다. (강좌게시판 config 글 참고)