ホームページ > バックエンド開発 > PHPチュートリアル > Zend Framework は SESSION データのマルチサーバー共有を実装します、zendsession_PHP チュートリアル

Zend Framework は SESSION データのマルチサーバー共有を実装します、zendsession_PHP チュートリアル

WBOY
リリース: 2016-07-12 08:56:15
オリジナル
870 人が閲覧しました

Zend FrameworkのSESSIONデータのマルチサーバー共有を実現する方法、zendsession

この記事では、Zend FrameworkのSESSIONデータのマルチサーバー共有を実現する方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

1. 問題の原因

大規模な Web サイトには通常、複数のサーバーがあり、複数の第 2 レベルのドメイン名を使用します。このように、1 つのサーバーで生成されたセッションをすべてのサーバーで共有することはできません。このように、ユーザーは 1 か所でログインすることができず、全員がアクセスすることもできません

2. PHP セッションの仕組み

問題を解決する前に、まず PHP SESSION がどのように機能するかを理解しましょう。クライアント (ブラウザなど) が Web サイトにログインすると、訪問した PHP ページは session_start() を使用して SESSION を開くことができ、これによりクライアントの一意の識別 SESSION ID が生成されます (この ID は関数 session_id( ))。 SESSION ID は 2 つの方法でクライアントに保持できるため、PHP プログラムは別のページをリクエストするときにクライアントの SESSION ID を学習できます。1 つは、デフォルトで GET URL または POST フォームに SESSION ID を自動的に追加することです。最初の方法では、変数名は PHPSESSID ですが、もう 1 つの方法では、COOKIE を通じてセッション ID を保存します。デフォルトでは、この COOKIE の名前は PHPSESSID です。ここでは、広く使われている COOKIE メソッドを中心に説明します。

それでは、SESSION データはどこに保存されるのでしょうか?もちろんサーバー側では、メモリに保存されるのではなく、ファイルまたはデータベースに保存されます。デフォルトでは、php.ini で設定される SESSION の保存方法はファイル (session.save_handler = files) です。つまり、ファイルの読み書きによって SESSION データが保存され、SESSION ファイルが保存されるディレクトリはセッションによって指定されます。 save_path であり、sess_c72665af28a8b14c0fe11afe3b59b51b のように、ファイル名は接頭辞である sess_ で始まり、その後にセッション ID が続きます。ファイル内のデータはシリアル化後の SESSION データです。アクセス数が多い場合は、さらに多くの SESSION ファイルが生成される可能性があります。この場合、SESSION ファイルを保存するための階層ディレクトリを設定すると、設定方法が大幅に向上します。 session.save_path= N;/save_path"、N は階層レベル、save_path は開始ディレクトリです。 SESSION データを書き込むとき、PHP はクライアントの SESSION_ID を取得し、この SESSION ID を使用して、指定された SESSION ファイル格納ディレクトリ内で対応する SESSION ファイルを検索し、存在しない場合は作成し、最後にデータをシリアル化して書き込みます。ファイル。 。 SESSION データの読み取りも同様の操作プロセスで、読み取りデータを逆シリアル化する必要があり、対応する SESSION 変数が生成されます。

3. 複数のサーバー間で SESSION を共有する際の主な障害と解決策

SESSION の仕組みを理解すると、デフォルトで各サーバーが同じクライアントの SESSION ID を生成することがわかります。たとえば、同じユーザー ブラウザの場合、サーバー A によって生成される SESSION ID は 30de1e9de3192ba6ce2992d27a1b6a0a ですが、サーバー B は何です。生成されるのは c72665af28a8b14c0fe11afe3b59b51b です。また、PHP の SESSION データは、このサーバーのファイル システムに別途保存されます。下の写真に示すように:

問題を特定したら、解決を開始できます。 SESSION データを共有したい場合は、2 つの目標を達成する必要があります。1 つは、同じクライアントに対して各サーバーによって生成された SESSION ID が同じである必要があり、同じ COOKIE を介して渡せることです。つまり、各サーバーは次のことを行うことができなければなりません。もう 1 つは、SESSION データの保存方法と場所が各サーバーにアクセスできるようにする必要があることです。簡単に言えば、複数のサーバーはクライアントの SESSION ID を共有し、サーバーの SESSION データも共有する必要があります。
最初の目標の実現は実際には非常に簡単です。デフォルトでは、COOKIE のドメインは現在のサーバーのドメイン名/IP アドレスになります。各サーバーのドメインは異なります。たとえば、www.aaa.com のサーバーは、www.bbb.com のサーバーが設定した COOKIE に相互にアクセスできません。ここで説明している同じ Web サイトのサーバーにはそれぞれ独自の特徴があります。つまり、同じ第 1 レベルのドメインに属しています。たとえば、aaa.infor96.com と www.infor96.com は両方ともドメイン .infor96 に属しています。 .com の場合、COOKIE のドメインを .infor96.com に設定して、aaa.infor96.com、www.infor96.com などがこの COOKIE にアクセスできるようにします。 PHPコードでの設定方法は以下の通りです

リーリー

このようにして、各サーバーが同じクライアント SESSION ID を共有するという目的が達成されます。
2 番目の目的は、NFS などのファイル共有方法を使用して達成できますが、セットアップと操作はやや複雑です。データをmemcacheに入れることができます。このようにして、各サーバーは同じデータ ソースに簡単にアクセスし、同じ SESSION データを取得できます。

解決策は以下の図に示されています:

わかりました。

より zend 関連のコンテンツに興味のある読者は、このサイトの特別トピックをチェックしてください: 「Zend FrameWork フレームワーク入門チュートリアル」、「php 優れた開発フレームワークの概要」、「Yii フレームワークの紹介と一般的なテクニックの概要」、「ThinkPHP」入門チュートリアル』『PHPオブジェクト指向プログラミング入門チュートリアル』『php+mysqlデータベース操作入門チュートリアル』『php共通データベース操作スキルまとめ』

この記事で説明した内容が、Zend Framework フレームワークに基づいた PHP プログラミングの皆様のお役に立てれば幸いです。

興味がありそうな記事:

  • Zend Framework チュートリアル - Zend_Config_Xml の使用分析
  • Zend の Config メカニズムに基づくアプリケーション分析
  • Zend Framework チュートリアル - 設定ファイル application.ini 分析
  • Zend Framework Smarty 拡張機能の実装方法
  • Zendフレームワークのルーティング機構のコード解析
  • Zend Frameworkはmemcacheにセッションを保存するメソッドを実装
  • Zend Frameworkのページングクラスの使い方を詳しく解説
  • Zend Frameworkは複数のファイルアップロード機能を実装したサンプル
  • 環境設定と使い始めるための第一歩Zend Framework Hello World の例 (デモ ソース コードのダウンロード付き)
  • Zend Framework チュートリアル: データベースに接続して追加/削除チェックを実行する方法 (デモ ソース コードのダウンロード付き)
  • Zend Framework チュートリアル Zend_Config_Ini の使用分析

www.bkjia.com本当http://www.bkjia.com/PHPjc/1113717.html技術記事 Zend Framework は複数のサーバー間で SESSION データを共有する方法を実装します。 zendsession この記事では、SESSION データのマルチサーバー共有を実現する Zend Framework の方法について説明します。みんなのためにみんなでシェアしましょう...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート