현재 위치: > 최신 기사 목록> session_register_shutdown () 함수를 사용할 때 세션을 자동으로 저장할 수없는 문제를 해결하는 방법은 무엇입니까?

session_register_shutdown () 함수를 사용할 때 세션을 자동으로 저장할 수없는 문제를 해결하는 방법은 무엇입니까?

M66 2025-07-18

PHP에서 Session_Register_Shutdown () 함수는 세션이 닫힐 때 자동으로 실행되는 콜백 함수를 등록하는 데 사용됩니다. 이론적으로 스크립트가 실행될 때 세션 데이터를 자동으로 저장하는 데 도움이 될 수 있습니다. 그러나 실제로 사용하면 많은 개발자가 문제를 겪었습니다. Session_Register_Shutdown () 이 호출 되더라도 세션 데이터를 자동으로 저장할 수 없으므로 세션 정보가 손실되거나시기 적절하게 업데이트됩니다.

이 기사는이 문제의 근본 원인을 자세히 분석하고 세션의 자동 저축을 올바르게 처리하는 데 도움이되는 몇 가지 실현 가능한 솔루션을 제공합니다.


1. 문제의 원인 분석

session_register_shutdown () 은 실제로 비교적 낮은 수준의 함수입니다. PHP가 세션을 닫아 세션 데이터를 저장하면 SESSION_WRITE_CLOSE ()를 자동으로 호출합니다. 그러나 PHP 5.4에서 시작 하여이 기능은 폐기 된 것으로 표시되어 일부 환경에서 불안정합니다. 특히 SESSION_WRITE_CLOSE () 에 대한 초기 호출 또는 스크립트에서 출력 버퍼 관련 작업이있을 때 SESSION_REGISTER_SHUTDOWN () 은 저장 작업을 정상적으로 트리거 할 수 없습니다.

또한 Session_Register_Shutdown ()은 세션이 닫히면 SESSION_WRITE_CLOSE ()를 자동으로 호출합니다. 개발자가 코드에서 session_write_close ()를 적극적으로 호출 한 경우 후속 통화의 효과는 무시되어 세션이 올바르게 작성되지 않습니다.


2. 솔루션

해결책 1 : Session_Register_Shutdown () 사용을 피하십시오.

Session_Register_Shutdown ()가 더 이상 사용되지 않은 경우, SESSION_WRITE_CLOSE () 와 직접 결합하여 SESTION_WRITE_CLOSE () 와 직접 결합하여 스크립트가 종료 될 때 세션이 수동으로 호출되도록하는 것이 좋습니다.

샘플 코드 :

 <?php
session_start();

// 스크립트 끝에 수동으로 저장하십시오 session
register_shutdown_function(function() {
    session_write_close();
});

// 개정하다 session 데이터
$_SESSION['user'] = '장 산';

echo "Session 세트";
?>

여기서 핵심은 스크립트가 실행 된 후 익명 함수를 호출하는 register_shutdown_function ()을 사용하는 것입니다. 따라서 Session_write_Close () 가 호출되고 세션 데이터가 올바르게 저장되도록합니다.


솔루션 2 : 스크립트에서 Session_Write_Close ()가 미리 호출되지 않은지 확인하십시오.

스크립트의 다른 부분에서 session_write_close ()가 호출 된 경우 register_shutdown_function () 또는 session_register_shutdown () 로 호출하는 것이 유효하지 않을 수 있습니다. 반복 통화를 피하기 위해 코드를 점검해야합니다.

예를 들어, 다음 코드는 세션이 자동으로 저장되지 않게합니다.

 <?php
session_start();

session_write_close(); // 일찍 문을 닫았습니다 session

// 등록이 닫힐 때 호출됩니다,실제로 다시는 적용되지 않습니다
session_register_shutdown();

$_SESSION['user'] = 'Li Si';

echo "Session 아마 저장되지 않았을 것입니다";
?>

올바른 방법은 미리 닫은 세션_write_close ()를 제거하는 것입니다.

 <?php
session_start();

session_register_shutdown();

$_SESSION['user'] = 'Li Si';

echo "Session 저장";
?>

그러나 폐기 된 기능 사용을 피하기 위해 솔루션 1의 작문 방법으로 변경하는 것이 좋습니다.


반응식 3 : 자동 등록 대신 수동으로 Session_Write_Close ()를 호출합니다

많은 시나리오에서 코드가 종료되기 직전 직전에 세션 _write_close () 호출은 안정적이고 간단한 접근 방식입니다.

 <?php
session_start();

$_SESSION['cart'][] = '상품A';

// 모든 비즈니스 논리를 처리 한 후,매뉴얼 쓰기 session
session_write_close();

echo "쇼핑 카트 업데이트";
?>

이 방법은보다 호환되며 자동 등록에 의존하는 복잡성을 피합니다.


3. 관련 자원

PHP 세션 처리에 대한 자세한 내용은 공식 문서를 참조하십시오.

 <a href="https://m66.net/manual/zh/function.register-shutdown-function.php">PHP 공식적인 register_shutdown_function() 문서</a>