PHPセッションは、Webの固有のステートレス性を解決し、ショッピングカート、Webサイトへの訪問追跡、ユーザーナビゲーション監視などの機能を有効にします。 PHPのデフォルトセッション処理ではほとんどの場合、カスタムソリューションは機能と代替データストレージの拡張と代替データストレージを提供します。この記事では、デフォルトのメカニズムについて説明し、カスタマイズされたセッション管理のためにそれをオーバーライドする方法を示します。
重要な概念:
serialize()
unserialize()
デフォルトのセッションハンドラーを交換できます。 セッションの開閉、閉鎖、読み取り、書き込み、破壊、ゴミ収集の6つのコールバック機能が必要です。
カスタムハンドラーは、多くの場合、クラスを実装するクラスを使用し、各セッションのライフサイクル段階にメソッドを提供します。
PHPによって定期的に呼び出されたガベージコレクションは、時代遅れのセッションデータを削除します。 その周波数は、session_set_save_handler()
SessionHandlerInterface
session.gc_probability
:session.gc_divisor
php.ini
を使用して変更できます。 Webルートディレクトリの外側にセッションデータを保存すると、セキュリティが強化されます。 セッションファイル(「sess_」という名前に続いて、セッションIDが続きます - 経由で取得可能)にシリアル化されたデータが含まれています。たとえば、
を保存すると、ファイルが含まれていますこのシリアル化は、カスタムハンドラーであっても一貫しています。
データが保存されている場合、
<?php echo session_save_path(); ?>セッションライフサイクルとphp.ini
:session_save_path("/path/to/session/data");
session_id()
セッションファイルを開き、データを$_SESSION["colors"] = array("red", "blue");
にロードします。 スクリプトが終了すると(または
<code>colors|a:2:{i:0;s:3:"red";i:1;s:4:"blue";}</code>
各ライフサイクルステージには、登録されたコールバック関数が必要です。それ以外の場合、PHPは警告を発します。 コールバックは、関数、閉鎖、オブジェクトメソッド、または静的クラスメソッドです。
カスタムハンドラーの構築(mysqlの例):
この例では、MySQLデータベースを使用してセッションデータを保存します。データベーステーブルには、セッションID、データ、および最後のアクセス時間のフィールドが必要です。次の関数は、データベースの相互作用にPDOを使用して、6つのコールバックを示しています。
<?php echo session_save_path(); ?>
プレースホルダーデータベースの資格情報を独自のものに置き換えることを忘れないでください。 この例は、基本的なフレームワークを提供します。エラー処理とより堅牢なデータベースインタラクションを使用するには、追加する必要があります。
および<code>colors|a:2:{i:0;s:3:"red";i:1;s:4:"blue";}</code>
read
結論:write
カスタムセッションハンドラーは、セッション管理の柔軟性と制御を提供します。 この記事では、MySQLベースのソリューションを実証しました。同じ原則が他のストレージメカニズムに適用されます。 シリアル化/脱着を正しく処理し、適切なエラー処理とセキュリティ対策を実装することを忘れないでください。
以上がカスタムセッションハンドラーを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。