先ほどセッション関連の設定について説明しましたが、開発中にドメイン間でセッションを共有するためにログイン モジュールが必要になることがよくあります。ログインに必要な場所は 1 つだけで、関連する Web サイトも必要になります。ログイン状態。 9streets.cn と a.9streets.cn の間の場合と、a.com と b.com の間の場合の 2 つの状況があり、ここ数日の対処方法をまとめました。
第 1 レベルと第 2 レベルのドメイン名であっても、異なるドメイン名のクロスドメインであっても、次の 2 つの点を達成する必要があります:
クライアントは同じ sessionId にアクセスします。
アクセスされるセッション データの場所すべてのドメイン名に対応するサーバーは一貫している必要があります。
1. 共通の sessionId へのアクセスは、主に現在の sessionId を Cookie に書き込むことによって行われます。
Cookie には、ユーザーがログインするときにバックグラウンドで共有する必要があるログインを設定する必要があります。情報のドメイン名が第 1 レベルまたは第 2 レベルのドメイン名の下にある場合は、Cookie をメインのドメイン名に直接設定します (例:
setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".a.com");
)。ドメイン名が違う?これは、P3P テクノロジーを使用したシンプルなソリューションであり、Web サイト x.com にアクセスすると、y.com プログラムが y.com ファイルへの sessionid 値の書き込みをトリガーし、sessionid 値を取得できます。セッション値はデータベースに保存されており、同じ値が取得されるので、sessionid 値で十分です。これには、y.com のプログラム ファイルがドメイン間でアクセスできる必要があります。デフォルトでは、ブラウザーはドメイン間で Cookie を設定できません。p3p ヘッダーを追加する必要があります。対応する PHP ファイルに追加します: header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
2. 一貫したセッション データの保存場所を実現する方法
セッションデータは、デフォルトではサーバーのメモリに保存されるのではなく、ファイルの形式で保存されます。ここでは、すべてのドメインでアクセスできるように変更する必要があります。データベースストレージ、ファイルストレージ、メモリストレージをオンラインで導入し、セッションデータの保存にデータベースを使用し、Webサイトへのアクセス数が多い場合、データベース上でSESSIONの読み書きが頻繁に発生し、効率が大幅に低下します。次の session.rar では、メモリの存在が考慮されます。
yii2 でこの問題に対処するには、インターネット上にあるチュートリアルによると、最終的に成功した構成は次のようになります:
フロントエンドの config フォルダーの main.php で
$host = explode('.', $_SERVER["HTTP_HOST"]); if (count($host) > 2) { define('DOMAIN', $host[1] . '.' . $host[2]); } else { define('DOMAIN', $host[0] . '.' . $host[1]); } define('DOMAIN_HOME', 'www.' . DOMAIN); define('DOMAIN_USER_CENTER', 'man.' . DOMAIN); define('DOMAIN_API', 'api.' . DOMAIN); define('DOMAIN_EMAIL', 'mail.' . DOMAIN); define('DOMAIN_LOGIN', 'login.' . DOMAIN); define('DOMAIN_IMG', 'img.' . DOMAIN);
を構成し、次に User とセッション:
'user' => [ 'enableAutoLogin' => true, 'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain' => '.' . DOMAIN], ], 'session' => [ 'cookieParams' => ['domain' => '.' . DOMAIN, 'lifetime' => 0], 'timeout' => 3600, ],
ここでは、設定項目のユーザーとセッションにドメインを書き込みました。例: 'domain'=>'.baidu.com' なので、判断する必要はありません。
以上がこの記事の全内容です。皆様の学習に役立つことを願っております。また、皆様にも PHP 中国語 Web サイトをサポートしていただければ幸いです。
Yii2 でのセッションのクロスドメイン共存のソリューションに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。