PHP에서 Session_Register_Shutdown () 함수는 세션이 닫힐 때 자동으로 실행되는 콜백 함수를 등록하는 데 사용되므로 스크립트가 실행 된 후 세션 데이터를 올바르게 저장하고 닫을 수 있습니다. 그러나 복잡한 프로젝트에서 Session_Register_Shutdown ()은 때때로 실수로 덮어 쓰거나 등록되지 않아 세션 종료 작업이 정상적으로 실행되지 않아 데이터 손실 또는 세션 예외를 초래할 수 있습니다. 이 기사는이 상황을 피하고 세션 폐쇄 작업의 안정적인 실행을 보장하는 방법을 자세히 소개합니다.
Session_Register_Shutdown ()은 PHP 5.4 후 register_shutdown_function ( 'session_write_close')을 교체하는 권장 방법입니다. 목적은 스크립트 끝에서 PHP 세션이 자동으로 닫히도록하는 것입니다.
<?php
session_start();
session_register_shutdown(); // 세션 닫기 기능을 등록하십시오
?>
이 기능은 내부에 가까운 기능을 자동으로 등록하여 Session_Write_Close () 가 호출되고 세션 데이터가 작성되고 세션이 닫히도록합니다.
PHP의 등록 마감 기능은 콜백 메커니즘을 기반으로하므로 Register_Shutdown_Function ()이 코드 어딘가에 호출되고 Session_Register_Shutdown () 에 의해 등록 된 종료 콜백이 초과 작성되거나 세션을 수동으로 닫은 후 다른 작업이 호출되면 세션 마감 로직이 불완전하거나 건너 뜁니다.
코드가 Session_Register_Shutdown ()을 한 번만 호출해야합니다. 프레임 워크 또는 대규모 프로젝트에서 싱글 톤 또는 글로벌 상태는 함수가 한 번만 등록되도록하는 데 사용됩니다.
<?php
if (!defined('SESSION_SHUTDOWN_REGISTERED')) {
session_register_shutdown();
define('SESSION_SHUTDOWN_REGISTERED', true);
}
?>
추가 종료 함수를 등록 해야하는 경우 Session_Register_Shutdown () 에 의존하는 대신 콜백에서 Session_Write_Close ()를 수동으로 호출 할 수 있습니다.
<?php
session_start();
register_shutdown_function(function() {
// 세션을 먼저 닫는 작업을 수행하십시오
session_write_close();
// 스크립트 끝에서 수행 해야하는 다른 조치
error_log("스크립트의 끝,다른 셧다운 작업을 수행하십시오");
});
?>
이 방법은 세션 종료가 항상 실행되고 덮어 쓰지 않도록합니다.
Session_write_close () 가 호출되면 현재 세션 데이터가 작성되고 닫히고 후속 세션 쓰기 작업이 유효하지 않습니다. 코드에서 Session_Write_Close () 가 미리 호출되면 반복 된 호출을 피해야합니다.
PHP는 등록 된 폐쇄 기능을 직접 쿼리하지는 않지만 충돌을 방지하기 위해 캡슐화 등록 프로세스를 통해 균일하게 관리 할 수 있습니다.
<?php
class ShutdownManager {
private static $callbacks = [];
public static function register(callable $callback) {
self::$callbacks[] = $callback;
}
public static function run() {
foreach (self::$callbacks as $callback) {
call_user_func($callback);
}
}
}
session_start();
session_register_shutdown();
ShutdownManager::register('session_write_close');
ShutdownManager::register(function() {
error_log("사용자 정의 스크립트 클로즈 작업");
});
register_shutdown_function(['ShutdownManager', 'run']);
?>
이를 통해 모든 셧다운 작업의 중앙 집중식 관리가 서로를 덮어 쓰지 않도록합니다.
<?php
session_start();
// 한 번만 전화하십시오 session_register_shutdown()
if (!defined('SESSION_SHUTDOWN_REGISTERED')) {
session_register_shutdown();
define('SESSION_SHUTDOWN_REGISTERED', true);
}
// 추가 맞춤형 근접 기능
register_shutdown_function(function() {
// 추가 종료 작업
error_log("세션이 닫힌 후에 수행 된 추가 작업이 수행됩니다");
});
// 예제 액세스 URL
$url = "https://m66.net/path/to/resource";
echo "<a href=\"$url\">액세스 리소스</a>";
?>
Session_Register_Shutdown () 에 대한 여러 통화를 피하고 상수 또는 상태를 사용하여 반복 등록을 방지하십시오.
register_shutdown_function ()을 통해 셧다운 작업은 균일하게 관리되며 Session_Write_Close ()는 수동으로 호출되어 세션 종료 로직이 항상 실행되도록합니다.
호출 세션 _write_close () 를 미리 호출하지 않으면 후속 세션 쓰기 실패가 발생합니다.
복잡한 프로젝트에서는 콜백 기능이 덮어 쓰는 것을 방지하기 위해 긴밀한 기능 관리를 캡슐화 할 수 있습니다.
위의 방법을 통해 Session_Register_Shutdown ()을 효과적으로 덮어 쓰거나 등록하지 못하면 PHP 세션이 닫힐 때 정상적인 작동 실행을 보장하고 세션 데이터의 보안 및 신뢰성을 향상시킬 수 있습니다.