PHPを使用してWebアプリケーションを構築する場合、セッションデータの管理と保存が重要な部分です。通常、ユーザーがブラウザまたはページを閉じても、セッションデータを適切に保存してデータの一貫性とセキュリティを確保できることを願っています。 session_register_shutdown()関数は、この目的のために存在するツールです。
session_register_shutdown()は、スクリプトが実行されたときにsession_write_close()を自動的に呼び出すためにPHPによって提供される組み込み関数です。これにより、スクリプトが正常に終了するか、予期せずに中止されるかに関係なく、現在のセッションデータをサーバーに安全に書き込むことができます。
デフォルトでは、PHPはスクリプトの実行後にセッションデータを自動的に保存します。ただし、場合によっては、 Register_shutdown_function()が有効になり、セッション操作が呼び出される場合、またはスクリプトがexit()やdie()などの機能を中央で呼び出す場合、セッションデータは正しく保存されない場合があります。現時点では、 session_register_shutdown()を使用することが特に重要です。
非常に簡単に使用できます。 session_start()を呼び出した後、 session_register_shutdown ()に電話する必要があります。
<?php
session_start();
session_register_shutdown();
// 例:ユーザーの訪問を増やします
if (!isset($_SESSION['views'])) {
$_SESSION['views'] = 1;
} else {
$_SESSION['views']++;
}
echo "あなたは最初です {$_SESSION['views']} 今回はこのページにアクセスしてください。";
?>
上記のコードは、ページがどのように閉じていても、セッションデータを保存できることを保証します(通常の閉鎖、異常な終了など)。
いくつかの高度なシナリオでは、ユーザーの動作ログのログやクリーニングリソースなどのカスタムシャットダウン関数を登録できます。現時点では、 SESSION_REGISTER_SHUTDOWN()を呼び出すことは、 register_shutdown_function()と協力してセッションの損失を防ぐことができます。
<?php
session_start();
session_register_shutdown();
register_shutdown_function(function () {
// ログをリモートサーバーに記録します
file_get_contents("https://m66.net/log?uid=" . urlencode($_SESSION['user_id']));
});
// 普通 session 論理
$_SESSION['last_action'] = time();
?>
上記のように、ユーザーのアクションレコードはhttps://m66.net/logに送信されます。これは、ページを閉じる前にユーザーの最後の動作をキャプチャするのに役立ちます。
session_register_shutdown()は、セッションが有効になっている場合にのみ有効ですので、 session_start()に電話してください。
シャットダウン関数のセッションデータを変更することはお勧めしません。シャットダウン段階は、主に外部リソースの読み取りまたは書き込みに適しています。
この関数は、PHP 7+バージョンで有効であり、以前のバージョンでは利用できなかった可能性があります。
session_register_shutdown()は、単純だが非常に実用的な機能であり、特にデータの一貫性の要件が高いアプリケーションシナリオに適しています。それを正しく使用することにより、偶発的なページの閉鎖によって引き起こされるセッションデータ損失の問題を効果的に回避することができ、それによりユーザーエクスペリエンスとシステムの堅牢性が向上します。
関連タグ:
session