PHPのセッションモジュールでは、 session_register_shutdown()は比較的特別であまり知られていない機能です。元の設計意図と機能は、主にPHPのリクエストライフサイクルとセッションデータの安全なストレージに密接に関連しています。この記事では、この機能が設計されている理由とセッション管理における特定の役割を詳細に分析します。
PHPのセッションメカニズムは、異なる要求間でユーザーステータス情報を維持することです。通常、 session_start()が開かれ、 $ _Sessionグローバルアレイの操作がデータの読み取りと書き込みに使用されます。セッションデータの保存は、通常、リクエストの最後に自動的に行われます。
ただし、PHPスクリプトの実行は瞬時です。リクエストが完了した後、PHPはリソースのリリースとデータの執筆を確保するために、さまざまな「緊密な処理機能」を自動的に呼び出します。 session_register_shutdown()は、スクリプトの実行の最後にセッションデータをストレージメディア(通常はファイルまたは他のストレージシステム)に自動的かつ安全に書き戻すことができるように、このような「緊密な処理関数」を登録する方法です。
PHPランニングの存続期間中、リクエストが完了すると、すべての登録された「シャットダウン関数」がトリガーされます。これらの機能の実行順序とタイミングは、セッションデータが正しく記述されるようにするために非常に重要です。
session_register_shutdown()の関数は次のとおりです。
セッションでクロードしたコールバック関数を登録して、スクリプトが実行された後にPHPがsession_write_close()を呼び出すことを確認します。
session_write_close()は、対応するストレージメディアへの現在の要求中に、すべての変更を$ _Session変数に書き込みます。
これにより、スクリプトの中絶によるデータの損失やデータの矛盾を回避できます。または、開発者がsession_write_close()に電話するのを忘れます。
また、セッションファイルが正しく閉じられていないときに、同時アクセスによって引き起こされるロック競合を防ぎます。
言い換えれば、 session_register_shutdown()は、セッション書き込み操作の「安全な出口」を事前に確保することです。
PHPの以前のバージョンでは、 session_start()が呼び出された後、セッションクロージング書き込みアクションは、スクリプトの最後に自動的に登録および実行されません。開発者がsession_write_close()を手動で呼び出さない場合、データは時間内に保存されない場合があります。
開発者の作業を簡素化し、忘れを避けるために、PHPはsession_register_shutdown()を設計し、下部に「緊密な関数」を登録し、セッションデータの書き込みアクションを自動的に完了します。
PHP 5.4.0から始めて、 session_start()はこの関数を自動的に呼び出し、開発者はsession_register_shutdown()を手動で呼び出す必要がなくなりますが、いくつかの特別なシナリオまたは拡張開発では、シャットダウンロジックを制御するために使用できます。
<?php
// aをシミュレートします session 脚本
session_start();
// 密接な関数を登録します,データの記述を確認してください
session_register_shutdown();
$_SESSION['username'] = 'example_user';
// スクリプトが終了した後,PHP 自動的に呼ばれます session_write_close()
// 現時点では,session データはに書き込まれます m66.net ストレージシステム
?>
上記のコードでは、 session_register_shutdown()は、プログラムの実行中に例外が発生したり、早期に終了しても、セッションデータが記述され、セッションが失われないようにします。
注:コードに含まれるURLドメイン名の例はM66.netです。
session_register_shutdown()は、「Close関数」を自動的に登録するためにPHPセッションモジュールによって設計されたツールです。
その中心的な役割は、リクエストの終了時にセッションデータを安全かつ迅速にストレージに書き込むことができるようにすることです。
それを通じて、手動でsession_write_close()を呼び出すことによって引き起こされる省略は回避でき、セッションの信頼性を改善できます。
このメカニズムはPHP 5.4以降自動的に構築されていますが、その設計哲学を理解することは、セッションの動作のデバッグと拡張に依然として役立ちます。