세션 처리 session_gc
(PHP 7 >= 7.1.0, PHP 8)
session_gc — 세션 데이터 가비지 수집 수행
설명
session_gc(): int|false
session_gc()는 세션 데이터 GC(가비지 컬렉션)를 수행하는 데 사용됩니다. PHP는 기본적으로 확률 기반 세션 GC를 수행합니다.
확률 기반 GC는 어느 정도 작동하지만 몇 가지 문제가 있습니다. 1) 트래픽이 적은 사이트의 세션 데이터는 원하는 기간 내에 삭제되지 않을 수 있습니다. 2) 트래픽이 많은 사이트의 GC는 너무 빈번한 GC일 수 있습니다. 3) GC는 사용자의 요청에 따라 수행되며 사용자는 GC 지연을 경험하게 됩니다.
따라서 UNIX 계열 시스템의 경우 "cron"을 사용하는 프로덕션 시스템에 대해 주기적으로 GC를 실행하는 것이 좋습니다. session.gc_probabilit를 0으로 설정하여 확률 기반 GC를 비활성화해야 합니다.
매개변수
이 함수에는 매개변수가 없습니다.
반환 값
session_gc()는 성공하면 삭제된 세션 데이터의 수를 반환하고 실패하면 false
를 반환합니다.
이전 저장 핸들러는 삭제된 세션 데이터의 수를 반환하지 않고 성공/실패 플래그만 반환합니다. 이 경우 실제로 삭제된 데이터와 상관없이 삭제된 세션 데이터의 수는 1이 됩니다.
Examples
예제 #1 cron과 같은 작업 관리자를 위한 session_gc() 예제
<?php
// Note: This script should be executed by the same user of web server process.
// Need active session to initialize session data storage access.
session_start();
// Executes GC immediately
session_gc();
// Clean up session ID created by session_gc()
session_destroy();
?>
예제 #2 사용자 액세스 스크립트에 대한 session_gc() 예제
<?php
// Note: session_gc() is recommended to be used by task manager script, but
// it may be used as follows.
// Used for last GC time check
$gc_time = '/tmp/php_session_last_gc';
$gc_period = 1800;
session_start();
// Execute GC only when GC period elapsed.
// i.e. Calling session_gc() every request is waste of resources.
if (file_exists($gc_time)) {
if (filemtime($gc_time) < time() - $gc_period) {
session_gc();
touch($gc_time);
}
} else {
touch($gc_time);
}
?>
기타
- session_start() - 새 시작 또는 기존 세션 재개
- session_destroy() - 세션에 등록된 모든 데이터 삭제
- session.gc_probability