>백엔드 개발 >PHP 튜토리얼 >30분 후 PHP 세션 만료를 안정적으로 관리하는 방법은 무엇입니까?

30분 후 PHP 세션 만료를 안정적으로 관리하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-25 04:59:16809검색

How to Reliably Manage PHP Session Expiry After 30 Minutes?

30분 후 PHP 세션 만료를 관리하는 방법

특정 시간 동안 세션을 유지한 후 종료해야 하는 필요성 웹 개발에서 일반적입니다. PHP는 세션 시간 초과 설정 옵션을 제공하지만 항상 신뢰할 수 있는 결과를 제공하는 것은 아닙니다. 기존 PHP 메커니즘의 단점을 이해하고 신뢰할 수 있는 솔루션을 살펴보겠습니다.

PHP 내장 시간 초과 옵션의 신뢰성 문제

PHP는 세션 설정을 위한 두 가지 옵션을 제공합니다. timeouts:

  1. session.gc_maxlifetime: PHP가 세션 데이터를 "쓰레기"로 간주하고 정리를 시작하는 시간(초)을 제어합니다. 그러나 가비지 수집 프로세스는 session.gc_probability 및 session.gc_divisor에 의해 결정되는 무작위 확률에 의존하기 때문에 이 옵션은 신뢰할 수 없습니다.
  2. 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
    session_destroy(); // Destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // Update last activity timestamp
  1. 세션에 "LAST_ACTIVITY" 키가 있는지 확인하고 마지막 활동 이후 30분이 지났는지 확인하세요.
  2. 세션이 30분 이상 비활성화된 경우 session_unset()을 사용하여 모든 세션 변수를 설정 해제하고 다음을 사용하여 세션을 삭제합니다. session_destroy().
  3. 활성 사용 중에 세션을 활성 상태로 유지하려면 요청마다 "LAST_ACTIVITY" 타임스탬프를 정기적으로 업데이트하세요.

각 요청으로 세션 데이터를 업데이트하면 세션 파일의 수정 날짜가 수정됩니다. , 가비지 수집기는 세션을 조기에 제거하지 않습니다.

보안을 강화하려면 세션 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 and invalidate old one
    $_SESSION['CREATED'] = time(); // Update creation time
}

추가 참고 사항

  1. session.gc_maxlifetime이 다음 값보다 크거나 같은 값으로 설정되어 있는지 확인하세요. 사용자 정의 만료 처리기 기간(이 예에서는 1800).
  2. 만료하려는 경우 30분의 활동을 기반으로 세션을 설정하려면 setcookie(..., time() 60*30)을 사용하여 쿠키 만료를 설정하여 세션 쿠키를 활성 상태로 유지하세요.

위 내용은 30분 후 PHP 세션 만료를 안정적으로 관리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.