특정 시간 동안 세션을 유지하고 나중에 종료하려면 사용자 정의 세션 시간 초과를 구현하는 것이 좋습니다. 이 접근 방식은 session.gc_maxlifetime 또는 session.cookie_lifetime과 같은 세션 설정에 의존하는 것보다 더 안정적입니다.
1. session.gc_maxlifetime:
session.gc_maxlifetime은 세션 데이터가 '쓰레기'로 간주되어 제거되는 시간을 결정합니다. 그러나 가비지 컬렉션이 산발적으로 발생하므로 세션 만료 방법으로는 신뢰할 수 없습니다.
2. session.cookie_lifetime:
session.cookie_lifetime은 세션 자체가 아닌 브라우저로 전송된 쿠키의 수명에만 영향을 미칩니다. 클라이언트가 아니라 서버가 세션 무효화를 담당합니다.
권장 해결 방법:
마지막 활동 시간을 추적하는 타임스탬프를 유지하여 사용자 정의 세션 시간 초과를 구현합니다. 요청할 때마다 이 타임스탬프를 업데이트하세요.
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { // last request was more than 30 minutes ago session_unset(); // unset $_SESSION variable for the run-time session_destroy(); // destroy session data in storage } $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
이 방법은 활동 30분 후 세션 데이터를 효과적으로 만료하고 가비지 수집기에 의한 조기 제거를 방지합니다.
보안 강화를 위해 정기적으로 재생성을 고려하세요. 세션 고정을 방지하기 위한 세션 ID
if (!isset($_SESSION['CREATED'])) { $_SESSION['CREATED'] = time(); } else if (time() - $_SESSION['CREATED'] > 1800) { // session started more than 30 minutes ago session_regenerate_id(true); // change session ID for the current session and invalidate old session ID $_SESSION['CREATED'] = time(); // update creation time }
참고:
위 내용은 30분 동안 활동이 없으면 어떻게 PHP 세션을 효과적으로 만료할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!