PHPのクロスドメイン、クロスサブドメイン、クロスサーバーログイン方法の詳細説明
PHP を介してドメイン、サブドメイン、またはサーバー間でセッション ログインを読み取るにはどうすればよいですか?この記事では詳しい紹介をしていますので、困っている方は参考にしてください。
PHP クロスサブドメインおよびクロスサーバー
セッションは主に 2 つの部分に分かれています:
1 つはセッション データで、デフォルトでサーバーの tmp ファイルに保存され、ファイルの形式で存在します。
もう 1 つは、セッション データをマークするセッション ID です。セッション ID は、セッション ファイルのファイル名であり、ランダムに生成されるため、一意性とランダム性が保証され、セッションのセキュリティが確保されます。通常、セッションのライフサイクルが設定されていない場合、セッション ID はブラウザを閉じた後、自動的にログアウトされ、新しいセッション ID が登録されます。クライアントが Cookie を無効にしない場合、Cookie はセッション セッションの開始時にセッション ID とセッションの有効期間を保存する役割を果たします。
2 つの異なるドメイン名の Web サイトが同じセッションを使用したいと考えていますが、これにはセッションのクロスドメインの問題が伴います。
デフォルトでは、各サーバーは同じクライアントに対してそれぞれ SESSIONID を生成します。たとえば、同じユーザー ブラウザの場合、サーバー A によって生成される SESSION ID は 11111111111 ですが、サーバー B によって生成される SESSION ID は jbxuejbxue です。また、PHP の SESSION データは、このサーバーのファイル システムに別途保存されます。 SESSION データを共有したい場合は、次の 2 つの目標を達成する必要があります:
1 つは、同じクライアントに対して各サーバーによって生成される SESSION ID が同じである必要があり、同じ COOKIE を通過できることです。つまり、各サーバーは PHPSESSID という名前の同じ COOKIE を読み取ることができなければなりません。もう 1 つは SESSION です。データの保存方法と場所は、各サーバーがアクセスできることを保証する必要があります。簡単に言うと、これら 2 つの目標は、複数のサーバー (A サーバーと B サーバー) がクライアントの SESSION ID を共有し、サーバーの SESSION データも共有する必要があるということです。
最初の目標の実現は、実際には非常に簡単です。COOKIE のドメイン (setcookie() 関数の 4 番目のパラメーター) を特別に設定するだけです。デフォルトでは、COOKIE のドメインは現在のドメイン名です。サーバーのIPアドレスが異なる場合、各サーバーが設定したCOOKIESは相互にアクセスできません。
1) クロスサブドメイン
この方法では、クロスドメインは機能できませんが、同じサブドメインは機能します。たとえば、aaa.jbxue.com と www.jbxue.com は両方ともドメイン .jbxue.com に属します。その後、COOKIE のドメインを に設定できます。 jbxue..com、つまり aaa.jbxue.com、www.jbxue.com などはこの COOKIE にアクセスできます。このようにして、各サーバーが同じクライアント SESSION ID を共有するという目的が達成されます。
1. PHP ページの最初 (出力の前、session_start() の前) で次の設定を行うだけです。
ini_set('session.cookie_path', '/'); ini_set('session.cookie_domain', '.mydomain.com'); ini_set('session.cookie_lifetime', '1800');
2.php.iniで設定します
session.cookie_path = / session.cookie_domain = .mydomain.com session.cookie_lifetime = 1800
3. PHPページの先頭で関数を呼び出す(1と同じ条件)
session_set_cookie_params(1800 , '/', '.mydomain.com');
これら 3 つの方法は同じ効果があります。
ここでは、最初の方法を使用して、www.mydomain.com と sub.mydomain.com という 2 つのドメイン名を設定してテストします。
sub1.php
sub2.php
アクセスシーケンス:
(1)www.mydomain.com/sub1.php
ページ出力: Array ( [sub1] => sub1 )
(2)sub.mydomain.com/sub2.php
ページ出力: Array ([sub1] => sub1 [sub2] => sub2 )
成功
2 番目の目標は、データベースを使用して SESSION データを保存することで達成できます。これにより、各サーバーが同じデータ ソースに簡単にアクセスして同じ SESSION データを取得できるようになります。または、NFS などのファイル共有を使用できます。 NFS を構成する)
セッション データを保存するためにデータベースを使用する場合、Web サイトのアクセス数が多い場合、データベース上で SESSION の読み取りと書き込みが頻繁に行われる可能性があります。これを memcache に置くことができます。データベースに保存されている、実装された過去の記事があります。データベースと memcache を組み合わせるというアイデアは以前に議論されました。 memcache を単独で使用してセッションを保存するのが適切でない場合は、memcache をデータベースと組み合わせるのが最善です。
2) クロスドメイン ソリューション
アイデア:
jsonp クロスドメインメソッドを使用して、別のドメインのログイン暗号化情報を取得し、このドメインでのログインを実現します。
または、iframe を使用して解決しますが、ff/IE はそれをサポートしていないため、前に p3p プロトコルを追加する必要があります。
P3P (Platform for Privacy Preferences Project) は、自分が善良であることを宣言し、ブラウザ ユーザーの行動の収集を可能にするプロトコルです。
しかし実際には、誰もが自分は善人だと言いながら、裏では悪いことをしているかもしれません。
ここに意見の相違があります。 【参考】国内のほとんどのWebサイトはこのP3Pに注目していません。プライバシーの問題は外国ほど真剣に受け止められていない可能性があります (Microsoft のプライバシーに関する声明)。
最初に思いつくのは、JS を通じて Cookie を操作し、2 つの異なるドメインの Cookie が相互にアクセスできるようにすることで、上記の効果を実現することです。
次に、具体的な実装プロセスを 2 つのステップに分けて示します。
1. システム A でログインに成功したら、JS を使用して非表示の iframe を動的に作成し、iframe の src 属性を使用して、ドメイン A の Cookie 値を get パラメータとしてシステム B の b.jsp ページにリダイレクトします。 🎜>
var _frm = document.createElement("iframe"); _frm.style.display="none"; _frm.src = "http://www.jbxue.com/setcookie.php?mycookie=xxxxx";//此处xxx最好编码 document.body.appendChild(_frm);
2、在B系统的setcookie.php页面中来获取A系统中所传过来的cookie值,并将所获取到值写入用户的cookie中,当然域是自己的了,这样就简单的实现了cookie跨域的访问; 不过这其中有个问题需要注意,就是在IE浏览器下这样操作不能成功,需要在setocokie.php页面中设置P3P HTTP Header就可以解决了(具体詳細信息可以参考:http://www.w3.org/P3P/),P3P设置代码为:
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');//ecshop这么设置的

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











オープン ソースの詳細については、次のサイトを参照してください。 51CTO Honmeng 開発者コミュニティ https://ost.51cto.com 実行環境 DAYU200:4.0.10.16SDK: 4.0.10.15IDE: 4.0.600 1. アプリケーションを作成するには、[ファイル] をクリックします。 >新しいファイル ->プロジェクトの作成。テンプレートを選択します: [OpenHarmony] EmptyAbility: プロジェクト名 shici、アプリケーション パッケージ名 com.nut.shici、およびアプリケーションの保存場所 XXX (中国語、特殊文字、スペースは含まれません) を入力します。 CompileSDK10、モデル: ステージ。デバイス

Cookie は通常、ブラウザの Cookie フォルダに保存されます。ブラウザの Cookie ファイルは通常、バイナリ形式または SQLite 形式で保存されます。Cookie ファイルを直接開くと、文字化けしたり判読できないコンテンツが表示される可能性があるため、使用することをお勧めします。 Cookie を表示および管理するためにブラウザによって提供される Cookie 管理インターフェイス。

コンピュータ上の Cookie は、使用するブラウザとオペレーティング システムに応じて、ブラウザ上の特定の場所に保存されます。 1. Google Chrome、C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data\Default \Cookies に保存されます。等

セッション障害は通常、セッションの有効期間の期限切れまたはサーバーのシャットダウンによって発生します。解決策: 1. セッションの有効期間を延長する; 2. 永続ストレージを使用する; 3. Cookie を使用する; 4. セッションを非同期的に更新する; 5. セッション管理ミドルウェアを使用する。

PHPSession のクロスドメイン問題の解決策 フロントエンドとバックエンドの分離の開発では、クロスドメイン要求が標準になっています。クロスドメインの問題に対処するときは、通常、セッションの使用と管理が必要になります。ただし、ブラウザーのオリジンポリシーの制限により、デフォルトではセッションをドメイン間で共有できません。この問題を解決するには、いくつかの技術と方法を使用して、セッションのクロスドメイン共有を実現する必要があります。 1. ドメイン間でセッションを共有するための Cookie の最も一般的な使用法

Cookie の動作原理には、サーバーが Cookie を送信し、ブラウザが Cookie を保存し、ブラウザが Cookie を処理して保存することが含まれます。詳細な紹介: 1. サーバーは Cookie を送信し、サーバーは Cookie を含む HTTP 応答ヘッダーをブラウザーに送信します。この Cookie には、ユーザーの本人認証、設定、ショッピング カートの内容などの情報が含まれており、ブラウザがこの Cookie を受信すると、ユーザーのコンピュータに保存されます。2. ブラウザは Cookie などを保存します。

携帯電話上の Cookie は、モバイル デバイスのブラウザ アプリケーションに保存されます: 1. iOS デバイスでは、Cookie は Safari ブラウザの [設定] -> Safari -> [詳細] -> [Web サイト データ] に保存されます; 2. Android デバイスでは、Cookie は保存されますChromeブラウザの設定→サイト設定→Cookieなど

Cookie 漏洩の危険には、個人識別情報の盗難、個人のオンライン行動の追跡、アカウントの盗難などが含まれます。詳細な導入: 1. 名前、電子メール アドレス、電話番号などの個人識別情報が盗まれます。この情報は、犯罪者によって個人情報の盗難、詐欺、その他の違法行為を実行するために使用される可能性があります。2. 個人のオンライン行動が追跡され、 Cookie を介して分析される アカウント内のデータを使用して、犯罪者はユーザーの閲覧履歴、ショッピングの好み、趣味などを知ることができます; 3. ログイン認証をバイパスし、ユーザーのアカウントに直接アクセスするなどして、アカウントが盗まれます。
