php에서 Session_Register_Shutdown ()은 세션 콜백을 등록하는 데 사용되는 함수입니다. 주요 기능은 스크립트 실행 종료시 Session_Write_Close ()를 자동으로 호출하여 세션 데이터가 올바르게 저장되도록하는 것입니다. 그러나 실제로 사용하는 동안 많은 개발자가 Session_Register_Shutdown () 이 적용 할 수없는 문제를 겪게되어 세션이 정상적으로 작성되지 않거나 저장되지 않도록합니다. 이 기사는 일반적인 구성 항목 및 사용법 세부 사항에서 시작 하여이 문제를 해결하고 해결하는 데 도움이됩니다.
session_register_shutdown () 은 PHP 5.4.0 이후에 도입 된 함수입니다. 스크립트 끝에서 Session_Write_Close ()를 자동으로 호출하는 콜백을 등록하는 데 사용됩니다. 이렇게하면 개발자가 Session_Write_Close ()를 수동으로 호출 해야하는 것을 방지 할 수있어 호출을 잊어 버린 세션 데이터가 작성되지 않는 문제를 방지합니다.
<?php
session_start();
session_register_shutdown();
$_SESSION['user'] = 'Alice';
// 스크립트의 끝에서,session 자동으로 작성됩니다
?>
주된 이유는 다음과 같습니다.
이 기능은 PHP 5.4.0에서만 지원됩니다. 이전 버전의 PHP를 사용하는 경우 적용되지 않습니다.
일부 환경 에서이 기능을 비활성화했을 수 있습니다. disabled_functions 구성을 확인하십시오.
session.auto_start가 활성화되면 (값 1), PHP는 자동으로 세션을 시작합니다. 호출 세션 _register_shutdown ()은 세션 수명주기가 자동 시작에 의해 제어되었으므로 유효하지 않을 수 있습니다.
이 구성을 끄는 것이 좋습니다.
session.auto_start = 0
코드 또는 프레임 워크가 자체적으로 session_write_close ()를 호출 한 다음 Session_Register_Shutdown () 에게 전화하여 등록 할 가능성이 없어 실행되지 않습니다.
환경이 Session_Register_Shutdown ()을 지원하는지 확인하려면 다음 순서로 PHP 구성을 확인하십시오.
<?php
// 확인하다 PHP 버전,~ 해야 하다 >= 5.4.0
echo 'PHP Version: ' . phpversion();
// 확인하다 disable_functions 구성,함수가 비활성화되지 않았는지 확인하십시오
echo 'Disabled functions: ' . ini_get('disable_functions');
// 확인하다 session.auto_start,닫는 것이 좋습니다
echo 'session.auto_start: ' . ini_get('session.auto_start');
// 확인하다 session.save_handler,일반적으로 files
echo 'session.save_handler: ' . ini_get('session.save_handler');
// 샘플 탐지 코드
if (function_exists('session_register_shutdown')) {
echo "session_register_shutdown() 사용 가능\n";
} else {
echo "session_register_shutdown() 不사용 가능\n";
}
?>
PHP를 5.4.0 이상으로 업그레이드하십시오.
php.ini 에서 설정 :
session.auto_start = 0
또는 코드의 시작 부분에서 세션이 자동으로 활성화되지 않도록하십시오.
프로그램 논리에서 세션이 사전에 닫히지 않았는지 확인하십시오. session_register_shutdown ()을 사용한 후에는 Session_Write_Close ()를 수동으로 호출 할 필요가 없습니다.
<?php
// 올바르게 사용하십시오 session_register_shutdown
session_start();
session_register_shutdown();
$_SESSION['user'] = 'Bob';
// 여기에는 수동 통화가 필요하지 않습니다 session_write_close()
echo "Session 写入将在스크립트의 끝에서自动完成。";
?>