ホームページ >バックエンド開発 >PHPチュートリアル >PHPでセッションストレージメカニズムを書き換える方法
セッション データ領域
デフォルトでは、ファイルの形式でサーバー オペレーティング システムの一時ディレクトリに保存されます。 セッションデータ領域が多すぎる場合、ファイル形式で保存すると動作が遅くなります。ディスクの読み取りと書き込み (IO、入出力) のオーバーヘッドが非常に高くなります。 実際のプロジェクトでは、セッション データをより高速に保存するために他の方法が使用されます。典型的な方法: データベース、メモリ。 データベース ストレージを例として説明します。セッション データはデータベースに保存されます。 セッション データ領域に直接関連する操作を書き直すだけです。 基本的な操作は読み取りと書き込みの 2 つだけです。 1: 読み取りと書き込みを完了できる 2 つの関数を定義します。 2: 読み取りと書き込みが必要な場合は、ユーザー定義の読み取りおよび書き込み関数を使用して完了することをセッション メカニズムに通知します。定義 2 (実際には合計6 つの必須関連関数) 読み取りと書き込みを完了できる関数関連トピックの推奨事項:phpセッション (写真、ビデオ、ケースを含む)
Informsession メカニズム、 が読み取りと書き込みを行う必要がある場合、ユーザー定義の読み取りおよび書き込み関数を使用して、
Session_set_save_handler( 开始函数,结束函数,读函数,写函数,删除函数,GC函数 );## を完了します。 #ユーザー定義関数をセッションストレージ関連関数として設定するために使用されます。 上記の構文は単なる設定通知であり、上記の 6 つの関数の呼び出しではありません。これらの 6 つの関数は、セッション メカニズムが特定の時点まで実行される場合にのみ使用されます。時間の転送!たとえば、セッションを開くときは、sessRead() を呼び出すだけで済みます。
通常はセッションを使用します
セッション メカニズムを開きます
このセッションでは、各レコードがセッションデータ領域となり、元のセッションファイルに相当します。
読み取り操作:
sessRead()したがって、渡されたセッションを受け入れるには、仮パラメータを指定する必要があります。 ID.パラメータ:
読み取りセッション データ文字列を返す必要があります。これは sess_content フィールドの内容です。読み取られない場合は、セッション データがないことを示す空の文字列を返します。
書き込み操作:
sessWrite()
削除操作:
sessDelete()セッションを破棄し、対応するセッション データ領域を削除して、セッションを閉じることができます。メカニズムも同時に!
PHP のセッション メカニズムは現在のセッションを渡します。 sessDelete -ID をパラメータとして呼び出すとき:
受け取るための仮パラメータを定義する必要があります:
#ガベージ コレクション操作: sessGC()
ガベージ: サーバー上の古いセッション データ領域。 ,ゴミの見分け方は?
セッションデータ領域が一定期間(最後の書き込み操作)以上使用されていない場合、それはガベージデータとみなされます。
最終書き込み時刻に基づいて、ゴミかどうかを判断できます。
最終書き込み時刻を記録するフィールドを追加する必要があります。
書き込み時に、このフィールドを更新します:
sessWrite();
判定条件:期限切れ
Last_write <現在時刻-1440
session_start() プロセス中、セッション メカニズムを開くプロセス中に、ガベージ コレクション操作が実行される可能性があります。実行すると、期限切れのガベージデータ領域はすべて削除されます。
デフォルトの確率は 1/1000 です。
確率を設定できます:
Possibility:
Base (divisor):
調整確率テスト:
スクリプト サイクル中に調整し、関数 ini_set() を使用し、セッション メカニズムを開く前に完了することをお勧めします:
実装 sessGC()
PHP のセッション メカニズムは、パラメータとして最大有効期間を渡します。
PHP を介してフォルダーをトラバースして画像のディレクトリ名とファイル名を取得する方法
方法foreach ループ後に残った php 配列参照の問題を解決します。
以上がPHPでセッションストレージメカニズムを書き換える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。