この記事では、主に Yii2 でのセッションのクロスドメイン名共存のソリューションを紹介します。内容が非常に優れているので、参考として共有します。
開発中に、ドメイン間で共有する必要があるログイン モジュールは、多くの開発者が遭遇したことがあると思います。ログを記録する場所は 1 つだけです。にログインし、関連する Web サイトにもログインしています。 9streets.cn と a.9streets.cn の間の場合と、a.com と b.com の間の場合の 2 つの状況があり、ここ数日の対処方法をまとめました。
第 1 レベルと第 2 レベルのドメイン名であっても、異なるドメイン名の下にあるクロスドメイン ドメイン名であっても、次の 2 つの点を達成する必要があります。
クライアントは同じ sessionId にアクセスします。
#すべてのドメイン名に対応するサーバーがアクセスするセッション データの場所は一貫している必要があります。
1. 共通の sessionId にアクセスするには、主に現在の sessionId を Cookie に書き込む必要があります。ユーザーがバックグラウンドでログインするようにアクセスして設定する場合、ログイン情報を共有する必要があるドメイン名が第 1 レベルまたは第 2 レベルのドメイン名の下にある場合は、Cookie をメインのドメイン名に直接設定します。例:
setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".a.com");
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
2. セッション データの一貫した保存場所を実現する方法
セッション データはデフォルトでサーバーの tmp ファイルに保存され、サーバーのメモリに保存されるのではなく、ファイルの形式で存在します。すべてのドメインでアクセスできるように変更する必要があります。データベースストレージ、ファイルストレージ、メモリストレージをオンラインで導入し、セッションデータの保存にデータベースを使用し、Webサイトへのアクセス数が多い場合、データベース上でSESSIONの読み書きが頻繁に発生し、効率が大幅に低下します。次の session.rar では、メモリの存在が考慮されます。
フロントエンドの構成フォルダーの 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' => [ 'enableAutoLogin' => true, 'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain' => '.' . DOMAIN], ], 'session' => [ 'cookieParams' => ['domain' => '.' . DOMAIN, 'lifetime' => 0], 'timeout' => 3600, ],
上記は内容全体です。この記事が皆さんの学習に役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトに注目してください。
Yii フレームワークでの jquery の使用に関する関連問題
以上がYii2 でのドメイン名間のセッション共存の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。