> 백엔드 개발 > PHP 튜토리얼 > 30분 동안 활동이 없으면 어떻게 PHP 세션을 효과적으로 만료할 수 있습니까?

30분 동안 활동이 없으면 어떻게 PHP 세션을 효과적으로 만료할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-23 11:23:12
원래의
740명이 탐색했습니다.

How Can I Effectively Expire a PHP Session After 30 Minutes of Inactivity?

30분 후 PHP 세션 만료

특정 시간 동안 세션을 유지하고 나중에 종료하려면 사용자 정의 세션 시간 초과를 구현하는 것이 좋습니다. 이 접근 방식은 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
}
로그인 후 복사

참고:

  1. session.gc_maxlifetime을 최소한 사용자 정의 만료 처리기 길이만큼 설정하세요.
  2. 세션 시작이 아닌 활동을 기반으로 세션을 만료하려면 setcookie를 사용하여 쿠키 만료 시간을 30으로 설정하세요. 분.

위 내용은 30분 동안 활동이 없으면 어떻게 PHP 세션을 효과적으로 만료할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿