PHP에서 만료 시간을 설정하는 방법

藏色散人
풀어 주다: 2023-03-07 08:50:01
원래의
3709명이 탐색했습니다.

PHP에서 만료 시간을 설정하는 방법: 먼저 세션을 설정하고 세션을 읽은 다음 "unset($_SESSION[$name]);"을 통해 세션을 지우고 마지막으로 "session::get('test')를 출력합니다. ;'이(가) 만료되었습니다.

PHP에서 만료 시간을 설정하는 방법

권장: "PHP 비디오 튜토리얼"

PHP에서 세션 만료 시간을 엄격하게 설정하세요!

30분 후 세션 만료를 엄격히 제한하세요!

1. 클라이언트 쿠키의 수명을 30분으로 설정합니다.

2. 세션의 최대 수명을 30분으로 설정합니다.

3.

이유는 먼저 PHP 세션의 기본 원칙을 이해해 보겠습니다.

PHP의 기본 세션 유효 기간은 1440초(24분)입니다. 즉, 클라이언트가 더 이상 새로 고치지 않는 경우입니다. 24분이 지나면 현재 세션이 만료됩니다. 물론, 사용자가 브라우저를 닫으면 세션이 종료되고 자연스럽게 세션이 더 이상 존재하지 않게 됩니다!

우리 모두 알고 있듯이 Session은 클라이언트가 제공한 SessionID를 기반으로 사용자의 파일을 얻은 다음 해당 파일을 읽어 클라이언트의 Cookie를 사용할 수 있습니다. 또는 Http1.1 프로토콜의

Query_String(액세스한 URL의 "?" 다음 부분)이 서버로 전송된 후 서버는 Session의 디렉터리를 읽어 옵니다...

제어하려면 세션의 수명 주기를 위해서는 먼저 php.ini에서 세션의 관련 설정을 이해해야 합니다(php.ini 파일을 열고 "[Session]" 섹션에서).

1 session.use_cookies: 기본값은 다음과 같습니다. "1"은 SessionID가 Cookie에 의해 전달됨을 의미합니다.

2. session.name: SessionID에 저장된 변수 이름입니다. 기본값은 다음과 같습니다. "PHPSESSID";

3. session.cookie_lifetime: SessionID가 클라이언트 쿠키에 저장되는 시간을 나타냅니다. 기본값은 0입니다. 이는 브라우저가 닫히자마자 SessionID가 무효화됨을 의미합니다. 이로 인해 세션을 영구적으로 사용할 수 없습니다!

4. session.gc_maxlifetime: 세션 데이터가 서버 측에 저장되는 시간입니다. 이 시간을 초과하면 세션 데이터가 자동으로 삭제됩니다.

이 외에도 다양한 설정이 있지만 이번 글과 관련된 내용은 먼저 세션 생존 기간을 설정하는 방법부터 살펴보겠습니다.

앞서 언급한 것처럼 서버는 SessionID를 통해 Session 데이터를 읽어오는데, 일반적으로 브라우저가 닫히면 브라우저에서 보낸 SessionID가 사라지기 때문에 수동으로 SessionID를 설정하고 저장만 하면 안 됩니다...

If 서버의 운영 권한이 있는 경우 이를 설정하는 것은 매우 간단합니다.

1. "session.use_cookies"를 1로 설정하고 쿠키를 사용하여 SessionID를 저장합니다. 1, 일반적으로 수정할 필요가 없습니다.

2. "session.cookie_lifetime"을 설정해야 하는 시간으로 변경합니다(예: 1시간, 초 단위로 3600으로 설정할 수 있음). gc_maxlifetime"을 "session.cookie_lifetime"과 동일하게;

세션 유효 기간을 설정하는 매개 변수가 session.gc_maxlifetime이라고 PHP 문서에 명확하게 명시되어 있습니다. 이 매개변수는 php.ini 파일이나 ini_set() 함수를 통해 수정할 수 있습니다. 문제는 여러 테스트를 거친 후에도 이

매개변수를 수정해도 기본적으로 아무런 효과가 없으며, 세션 유효 기간은 여전히 ​​기본값인 24분을 유지한다는 것입니다.

PHP의 작동 메커니즘으로 인해 세션 정보를 정기적으로 스캔하여 유효하지 않은지 확인하는 데몬 스레드가 없습니다. 유효한 요청이 발생하면 PHP는 전역 변수

session.gc_probability/session.gc_divisor(php.ini 또는 ini_set()를 통해 수정될 수도 있음)의 값을 기반으로 GC(가비지 수집기)를 시작할지 여부를 결정합니다. 기능).

기본적으로 session.gc_probability = 1, session.gc_divisor = 100이므로 GC가 시작될 확률은 1%입니다. GC의 역할은 모든 세션 정보를 스캔하여 현재 시간에서 세션의 마지막 수정 날짜를 뺀 후 session.gc_maxlifetime 매개변수와 비교하는 것입니다. 생존 시간이 gc_maxlifetime을 초과한 경우 세션을 삭제합니다.

현재까지는 모든 것이 정상적으로 작동하고 있습니다. 그렇다면 gc_maxlifetime이 유효하지 않게 되는 이유는 무엇입니까?

기본적으로 세션 정보는 시스템의 임시 파일 디렉터리에 텍스트 파일 형식으로 저장됩니다. Linux에서 이 경로는 일반적으로 \tmp이고, Windows에서는 일반적으로 C:\Windows\Temp입니다. 서버에 여러 개의 PHP 애플리케이션이 있는 경우 세션 파일을 동일한 디렉터리에 저장합니다. 마찬가지로 이러한 PHP 애플리케이션도 특정 확률로 GC를 시작하고 모든 세션 파일을 검색합니다.

문제는 GC가 작동할 때 다른 사이트의 세션을 구분하지 못한다는 것입니다. 예를 들어 사이트 A의 gc_maxlifetime은 2시간으로 설정되고 사이트 B의 gc_maxlifetime은 기본값 24분으로 설정됩니다. 사이트 B의 GC가 시작되면 스캔됩니다

공용 임시 파일 디렉터리를 스캔하고 사이트 A 또는 B에서 가져온 것인지에 관계없이 24분보다 오래된 모든 세션 파일을 삭제합니다. 이런 식으로 사이트 A의 gc_maxlifetime 설정은 쓸모가 없습니다.

문제를 찾으면 해결하기 쉽습니다. session.save_path 매개변수를 수정하거나 session_save_path() 함수를 사용하여 세션이 저장되는 디렉터리를 전용 디렉터리로 지정하세요. gc_maxlifetime 매개변수는 정상적으로 작동합니다.

또 다른 문제는 gc_maxlifetime은 세션이 유지되는 최단 시간만 보장할 수 있으며, 이 시간이 지나면 세션 정보가 즉시 삭제된다는 것입니다. 확률에 따라 GC가 시작되기 때문에 오랜 시간 동안 GC가 시작되지 않을 수 있으므로 gc_maxlifetime을 초과한 후에도 많은 세션이 여전히 유효합니다.

이 문제를 해결하는 한 가지 방법은 session.gc_probability/session.gc_divisor의 확률을 높이는 것입니다. 100%로 언급하면 ​​이 문제는 완전히 해결되지만 분명히 성능에 심각한 영향을 미칠 것입니다. 또 다른 방법은 PHP만 사용하여 직접

구현하고, 세션 클래스를 만들고, 세션 작성 시 만료 시간을 작성하는 것입니다. 읽을 때 만료 시간을 기준으로 만료 여부를 확인하십시오.

rreee

위 내용은 PHP에서 만료 시간을 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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