PHP에서 Session_Cache_Limiter는 세션 관련 캐싱 정책을 제어하는 데 사용됩니다. 응답 헤더의 캐시 제어 필드에 영향을 미치므로 브라우저 및 프록시 서버 캐시 페이지 컨텐츠를 결정합니다. 그러나 프로젝트에 Session_Cache_Limiter 에 대한 여러 설정이있는 경우 정책 충돌을 캐싱하여 캐시 불일치 문제가 발생하여 페이지의 실시간 및 사용자 경험에 영향을 미칩니다.
이 기사에서는 Session_Cache_Limiter 설정 충돌을 만나고 특정 솔루션 및 예제 코드를 제공 할 때 캐시 불일치를 피하는 방법을 자세히 설명합니다.
Session_Cache_Limiter는 HTTP 헤더에서 캐시 관련 필드를 제어하고 설정하는 PHP 세션 모듈의 구성 항목입니다. 일반적인 값은 다음과 같습니다.
NOCACHE (기본값) : 캐싱을 방지하도록 HTTP 헤더를 설정하여 모든 액세스가 최신 데이터임을 확인하십시오.
공개 : 캐시 프록시를 캐시 페이지로 허용합니다.
비공개 : 브라우저 캐시를 허용하지만 프록시 캐시를 허용하지 않습니다.
private_no_expire : 개인 과 유사하지만 만료 시간을 보내지 않습니다.
Session_Cache_Limiter () 함수를 호출하여 현재 요청의 캐시 정책을 동적으로 변경할 수 있습니다.
여러 코드에서 Session_Cache_Limiter ()를 반복하고 다른 값을 설정하십시오 <br> 예를 들어, 특정 구성 요소는 Nocache를 설정했고 다른 구성 요소는 공개 되었으며 두 사람은 갈등이 있습니다.
타사 라이브러리 또는 프레임 워크의 기본 설정은 비즈니스 코드 설정과 충돌합니다 <br> 타사 라이브러리를 소개 할 때 Session_Cache_Limiter () 도 라이브러리 내부에서 호출 될 수 있으며, 이는 프로젝트 코드의 설정과 일치하지 않습니다.
php.ini의 기본 구성은 코드의 명시적인 호출과 충돌합니다.
이 충돌로 인해 캐시 정책이 적용되지 않고 페이지 캐시 예외가 발생하지 않기 때문에 일관되지 않은 HTTP 헤더 정보가 나타납니다.
패키지 잡기 도구 (예 : Chrome Developer Tools의 네트워크 패널)를 통해 응답 헤더에서 캐시 관련 필드를 볼 수 있습니다.
캐시 제어
만료
프라그마
다른 페이지 나 동일한 페이지가 여러 번 요청할 때 응답 헤더가 일치하지 않는 경우 Session_Cache_Limiter 설정이 충돌 할 가능성이 높습니다.
여러 설정을 피하려면 프로젝트 입력 또는 초기화 파일 (예 : Index.php )에서 균일하게 Session_CACHE_LIMITER ()를 호출하십시오.
<?php
// 캐시 제한을 균일하게 설정하십시오 private,브라우저 캐시를 허용하지만 프록시 캐시를 금지하십시오
session_cache_limiter('private');
// 세션을 시작하십시오
session_start();
?>
프로젝트의 다른 모듈이 Session_Cache_Limiter () 를 호출 할 수있는 경우 정적 변수 또는 상수를 사용하여 반복적 인 통화를 피할 수 있습니다.
<?php
function setSessionCacheLimiterOnce($limiter = 'nocache') {
static $isSet = false;
if (!$isSet) {
session_cache_limiter($limiter);
$isSet = true;
}
}
setSessionCacheLimiterOnce('private');
session_start();
?>
php.ini 또는 코드에서 session.cache_limiter를 비활성화하고 유연성을 보장하기 위해 캐시 헤더를 직접 설정할 수 있습니다.
<?php
// 장애가 있는session자동 캐시 제한
ini_set('session.cache_limiter', '');
// 세션을 시작하십시오
session_start();
// 캐시 헤더를 수동으로 설정합니다
header('Cache-Control: private, max-age=600, must-revalidate');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 600) . ' GMT');
?>
이렇게하면 캐시 제어가 완전히 제어되고 있으며 세션_CACHE_LIMITER 로의 여러 호출로 인한 충돌을 피합니다.
<?php
// 关闭자동 캐시 제한,갈등을 피하십시오
ini_set('session.cache_limiter', '');
// 캐시 헤더의 통합 관리
function setCustomCacheHeaders() {
header('Cache-Control: private, max-age=300, must-revalidate');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 300) . ' GMT');
}
// 세션을 시작하십시오
session_start();
// 캐시 헤더를 설정하십시오
setCustomCacheHeaders();
// 페이지 콘텐츠 출력 예제
echo '<h1>세션 페이지에 오신 것을 환영합니다</h1>';
echo '<p>현재 시간:' . date('Y-m-d H:i:s') . '</p>';
?>
Session_CACHE_LIMITER 충돌로 인해 캐시 정책이 실패하고 캐시 불일치로 나타납니다.
여러 통화를 피하기 위해 프로젝트 입구에서 Session_Cache_Limiter를 설정하는 것이 가장 좋습니다.
복잡한 프로젝트의 경우 PHP의 자동 캐시 제한을 끄고 대신 캐시 헤더를 수동으로 설정할 수 있습니다.
패킷 캡처 도구를 사용하여 응답 헤더를 디버깅하고 캐시 정책 예외를 즉시 발견하십시오.
합리적으로 Session_CACHE_LIMITER 및 캐시 헤더 설정은 PHP 응용 프로그램의 안정적이고 일관된 캐시 동작을 보장하는 핵심입니다.