제목 | CI 세션 Core 질문 _sess_gc() 함수 관련 | ||
---|---|---|---|
카테고리 | CIBOARD | ||
글쓴이 | 학학이 | 작성시각 | 2017/02/01 10:27:45 |
|
|||
Session.php function _sess_gc() { if ($this->sess_use_database != TRUE) { // 테이블 사용할 때만 return; } srand(time()); // 랜덤 if ((rand() % 100) < $this->gc_probability) // 기본 5% 확률 { // 5% 확률로 세션 GC $expire = $this->now - $this->sess_expiration; $this->CI->db->where("last_activity < {$expire}"); $this->CI->db->delete($this->sess_table_name); log_message('debug', 'Session garbage collection performed.'); } }
CI 세션 Core 모듈에 위와 같은 함수가 있습니다. 제가 이해한 설명은 주석으로 대체합니다. 여기서 $this->CI->db->where("last_activity < {$expire}"); 이 라인의 해석이 궁금합니다. DB의 `last_activity` 는 보통 1485913069 같은 Timestamp 값입니다.
$expire = $this->now - $this->sess_expiration; 는 config.php 의 값으로 디폴트 7200 입니다. 1485913069 < 7200
7200 보다 작은 `last_activity` 값이 존재할 수가 없는데 어떻게 만료된 세션을 삭제하는 건가요??
--------추가 db 에서 한 row의 `last_activity` 값을 엄청 예전으로 변경하고 테스트해보니 실제로 삭제되는 것을 확인했습니다. 근데 아직도 저 조건문이 이해가 되지 않습니다.. SELECT * FROM sessions WHERE last_activity < 7200; 다음과 같은 쿼리를 `last_activity` 를 어제로 수정하고 해도 select에 안나옵니다. ( 이건 뭐 당연한거 같습니다.) * 사용된 `last_activity` 값 1485828526 ( 2017. 1. 31. 오전 11:08:46 ) |
|||
다음글 | windows + CodeIgniter + iis 관련... (2) | ||
이전글 | CI 세션 (DB) 로그인 여부 확인 시 세션 row ... (2) | ||
학학이
/
2017/02/01 11:15:31 /
추천
0
|
자문자답
제가 멍청했네여.. 위의 코드에서
13번 라인 현재 시간에서 만료시간을 빼서 넣네요..