| 제목 | 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번 라인 현재 시간에서 만료시간을 빼서 넣네요..