SESSION をキャッシュに保存する必要がある理由
PHP に関する限り、言語自体がサポートするセッションはファイルの形式でディスク ファイルに保存され、指定されたフォルダーに保存されます。保存されたパスは、設定ファイルで設定するか、関数 session_save_path() を使用して設定できます。 ) をプログラムに組み込んでいますが、これには欠点があります。
1 つ目は、ファイル システムに保存する方法ですが、セッションが使用されている限り、指定された sessionid が複数のファイルから検索されるため、非常に非効率的です。もちろん、キャッシュに保存すれば上記の問題は解決できますが、PHP独自のセッション関数を使えば、session_set_save_handler()関数を使って簡単にセッション処理プロセスを再制御することができます。 PHP のセッション シリーズ関数を使用しない場合は、同様のセッション関数を自分で記述することもできます。これは、ユーザーの Mid とログインに基づいて sessionId としてハッシュを計算します。要求されるたびに、有効であるように sessionId を追加する必要があります (初回ログイン時には必要ありません。この時点で sessionId が作成され、クライアントに返されます)。これも非常に便利です。簡潔かつ効率的。もちろん、この記事で主に話しているのは、PHP 自身の SESSION での「操作」です。2つ目は、複数のサーバーを使用する場合、セッション損失の問題が発生する可能性があることです(実際には他のサーバーに保存されます)。
セッションがキャッシュに保存されました
PHPはキャッシュをredisに保存します。もちろん、プログラム内でini_set()関数を使用してセッションの処理や保存を変更することもできます。これはテストに非常に便利です。ここではこれを使用します。もちろん、運用環境では設定ファイルを使用することをお勧めします。
リーリー
ここで、session.save_handler メソッドを redis に設定し、session.save_path を redis のアドレスとポートに設定します。設定後、更新して redis を確認すると、redis で sessionId が生成されていることがわかります。ブラウザによってリクエストされたものと同じです
phpが提供するインターフェースを利用してセッション処理関数を自分で書き換える
ここでは、まず PHP の session_set_save_handler 関数を見てみましょう。PHP5.4 以降では、SessionHandlerInterface インターフェイスを直接実装でき、コードはより簡潔になります。書き換える場合は主に以下の方法があります
以下は私の Redis 実装です (db は Redis に似ていますが、Redis コードは少なく、ここに掲載されています):open(string $savePath, string $sessionName); //open はコンストラクターに似ており、session_start() 関数の使用後など、セッションの開始時に呼び出されます。 close(); //クラスのデストラクターと同様に、write 関数が呼び出された後に呼び出され、session_write_close() の後にも実行されます
read(string $sessionId) //セッションを読み取るときに呼び出されます
write(string $sessionId, string $data) //データを保存するときに呼び出されます
destory($sessionId); // セッション (session_destory() または session_regenerate_id()) を破棄するときは
と呼ばれます gc($lifeTime); //期限切れのデータをクリーンアップするガベージクリーニング関数
主なことは、さまざまなストレージドライバーに応じてさまざまな特定のメソッドを設定できることです。必要に応じて、セッションを保存するための 2 つのドライバーを実装し、拡張することができます。とても便利です。
この日はmemcachedを使いたかったので、拡張が簡単なインターフェースメソッドを使用しました
リーリー
簡単なファクトリーパターンを見てください
リーリー
電話をかけるのもとても簡単です
リーリー
データベースバージョンの設定も非常に簡単です。必要に応じて、ここからフルバージョンとデモをダウンロードできます。
この記事の著作権は著者ifforever(luluyrt@163.com)に帰属します。記事を転載した後は、著者と原文リンクをわかりやすい位置に記載する必要があります。記事ページに記載されていない場合は、法的責任を追及する権利が留保されます。
上記は、キャッシュ (redis) と DB へのセッションを紹介する内容です。PHP チュートリアルに興味のある友人の参考になれば幸いです。