ホームページ バックエンド開発 PHPチュートリアル thinkPHPのセッションデータをmemcacheを使って複数のドメイン名で共有する実装方法_phpの例

thinkPHPのセッションデータをmemcacheを使って複数のドメイン名で共有する実装方法_phpの例

Aug 04, 2016 am 08:56 AM
memcache thinkphp 共有 複数のドメイン名

この記事の例では、memcache を使用して thinkPHP のセッション データを複数のドメイン名で共有する実装方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

1. 問題の原因

少し大きな Web サイトには通常、複数のサーバーがあり、それぞれのサーバーが異なる機能を持つモジュールを実行し、異なる第 2 レベルのドメイン名を使用します。ただし、総合的な Web サイトの場合、ユーザー システム、つまり一連のユーザー名が使用されます。ウェブサイト全体の各モジュールにログインするために使用できます。各サーバーがユーザー データを共有するのは比較的簡単で、バックエンドにデータベース サーバーを配置するだけで済み、各サーバーは統一されたインターフェイスを通じてユーザー データにアクセスできます。しかし、まだ問題があります。つまり、ユーザーがこのサーバーにログインした後、別のサーバーの他のモジュールに入るときに、再度ログインする必要があります。これは 1 回限りのログインであり、一般的な問題はすべて にマッピングされています。実際には、さまざまなサーバー間で SESSION データを共有する方法です。

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 _ で始まり、その後に SESSIONID が続くプレフィックスです。ファイル内のデータはシリアル化後の 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 を介して渡せることです。つまり、各サーバーは次のことを行うことができなければなりません。同じ SESSION ID を読み取ります。もう 1 つは、すべてのサーバーがアクセスできる必要がある SESSION データの保存方法/場所です。簡単に言えば、複数のサーバーはクライアントの SESSION ID を共有し、サーバーの SESSION データも共有する必要があります。

最初の目標の実現は、実際には、COOKIE のドメインを特別に設定するだけで済みます。デフォルトでは、COOKIE のドメインは、各サーバーのドメイン名/IP アドレスになります。設定された COOKIE は相互にアクセスできません。たとえば、www.aaa.com のサーバーは、www.bbb.com のサーバーが設定した COOKIE を読み書きすることはできません。ここで説明している同じ Web サイトのサーバーにはそれぞれ独自の特徴があります。つまり、同じ第 1 レベルのドメインに属しています。たとえば、tieba.xiaoyuan.com と www.xiaoyuan.com はどちらもドメイン .xiaoyuan に属しています。 .com の場合、COOKIE のドメインを .xiaoyuan.com に設定して、tieba.xiaoyuan.com、www.xiaoyuan.com などがこの COOKIE にアクセスできるようにします。 PHPコードでの設定方法は以下の通りです

リーリー

このようにして、各サーバーが同じクライアント SESSION ID を共有するという目的が達成されます。

2 番目の目標は、ファイル共有を使用することで達成できます。これを解決するには 2 つの方法があります。1 つはデータ ストレージ セッションを使用することで、もう 1 つは memcache を試すことです。ここで MEMCACHE を使用して解決してください。

私はセッションへの memcache アクセスをすでにサポートしている thinkphp フレームワークを使用しています。memcache サーバーを設定した後は、構成ファイルで memcache IP とポートを設定し、COOKIE_DOMAIN パラメーターを指定するだけで、通常どおりに操作できます。セッションモードで動作し、複数のドメイン名でセッションを共有できるようになりました

より thinkPHP 関連のコンテンツに興味のある読者は、このサイトの特別トピックをチェックしてください: 「ThinkPHP 入門チュートリアル」、「ThinkPHP テンプレート操作スキルの要約」、「ThinkPHP の共通メソッドの要約」、「Smarty テンプレートの基本チュートリアル」、 「PHPテンプレート技術」まとめ」です。

この記事が皆さんの ThinkPHP フレームワークに基づく PHP プログラムの設計に役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

壁紙エンジンを友達と共有する方法 壁紙エンジンを友達と共有する方法 Mar 18, 2024 pm 10:00 PM

ユーザーは、WallpaperEngine を使用する際に、入手した壁紙を友人と共有することができますが、多くのユーザーは、WallpaperEngine を友人と共有する方法を知りませんが、お気に入りの壁紙をローカルに保存し、ソーシャル ソフトウェアを通じて友人と共有することができます。壁紙エンジンを友達と共有する方法 答え: ローカルに保存して友達と共有します。 1. お気に入りの壁紙をローカルに保存し、ソーシャル ソフトウェアを通じて友人と共有することをお勧めします。 2. フォルダー経由でコンピューターにアップロードし、コンピューターのクリエイティブ ワークショップ機能を使用して [共有] をクリックすることもできます。 3. コンピュータでWallpaperengineを使用し、クリエイティブワークショップのオプションバーを開き、

WeChat Enterpriseで画面を共有する方法 WeChat Enterpriseで画面を共有する方法 Feb 28, 2024 pm 12:43 PM

企業専用の WeChat を使用する企業が増えています。これにより、企業と顧客およびパートナー間のコミュニケーションが容易になるだけでなく、作業効率も大幅に向上します。エンタープライズ WeChat は機能が豊富で、その中でも画面共有機能は非常に人気があります。会議中、画面を共有することで、参加者はより直感的にコンテンツを表示し、より効率的に共同作業を行うことができます。それでは、WeChat Enterprise で効率的に画面を共有する方法をまだ知らないユーザーのために、このチュートリアル ガイドで詳しく説明します。 WeChat Enterprise で画面を共有するにはどうすればよいですか? 1. Enterprise WeChat のメインインターフェイスの左側の青い領域に機能のリストが表示され、「会議」アイコンが表示され、クリックして入力すると、3 つの会議モードが表示されます。

thinkphpプロジェクトの実行方法 thinkphpプロジェクトの実行方法 Apr 09, 2024 pm 05:33 PM

ThinkPHP プロジェクトを実行するには、Composer をインストールし、Composer を使用してプロジェクトを作成し、プロジェクト ディレクトリに入り、php bin/consoleserve を実行し、http://localhost:8000 にアクセスしてようこそページを表示する必要があります。

thinkphp にはいくつかのバージョンがあります thinkphp にはいくつかのバージョンがあります Apr 09, 2024 pm 06:09 PM

ThinkPHP には、さまざまな PHP バージョン向けに設計された複数のバージョンがあります。メジャー バージョンには 3.2、5.0、5.1、および 6.0 が含まれますが、マイナー バージョンはバグを修正し、新機能を提供するために使用されます。最新の安定バージョンは ThinkPHP 6.0.16 です。バージョンを選択するときは、PHP バージョン、機能要件、コミュニティ サポートを考慮してください。最高のパフォーマンスとサポートを得るには、最新の安定バージョンを使用することをお勧めします。

Windows 11 フォルダー共有ガイド: ファイルとデータを簡単に共有する Windows 11 フォルダー共有ガイド: ファイルとデータを簡単に共有する Mar 13, 2024 am 11:49 AM

日常生活や仕事では、異なるデバイス間でファイルやフォルダーを共有する必要があることがよくあります。 Windows 11 システムには便利なフォルダー共有機能が組み込まれており、個人ファイルのプライバシーを保護しながら、同じネットワーク内の他のユーザーと必要なコンテンツを簡単かつ安全に共有できます。この機能により、個人情報の漏洩を心配することなく、ファイル共有が簡単かつ効率的になります。 Windows 11 システムのフォルダー共有機能を通じて、共同作業、通信、コラボレーションがより便利になり、仕事の効率と生活の利便性が向上します。共有フォルダーを正常に構成するには、まず次の条件を満たす必要があります。 (共有に参加している) すべてのデバイスが同じネットワークに接続されている。ネットワーク探索を有効にし、共有を設定します。ターゲットデバイスを知る

thinkphpの実行方法 thinkphpの実行方法 Apr 09, 2024 pm 05:39 PM

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

共有プリンターがプリンターに接続できない 共有プリンターがプリンターに接続できない Feb 22, 2024 pm 01:09 PM

デジタル時代の発展に伴い、共有プリンターは現代のオフィス環境に欠かせないものとなっています。しかし、場合によっては共有プリンターに接続できないという問題が発生し、作業効率に影響を与えるだけでなく、トラブルが続発してしまうこともあります。この記事は、共有プリンターがプリンターに接続できない理由と解決策を探ることを目的としています。共有プリンタがプリンタに接続できない理由は数多くありますが、最も一般的なのはネットワークの問題です。共有プリンターとプリンター間のネットワーク接続が不安定または切断されると、正常に動作できなくなります。

laravelとthinkphpではどちらが優れていますか? laravelとthinkphpではどちらが優れていますか? Apr 09, 2024 pm 03:18 PM

Laravel フレームワークと ThinkPHP フレームワークのパフォーマンスの比較: ThinkPHP は、最適化とキャッシュに重点を置いて、一般に Laravel よりもパフォーマンスが優れています。 Laravel は優れたパフォーマンスを発揮しますが、複雑なアプリケーションの場合は、ThinkPHP の方が適している可能性があります。

See all articles