ホームページ  >  記事  >  バックエンド開発  >  Yii2 でのドメイン名間のセッション共存の問題を解決する方法

Yii2 でのドメイン名間のセッション共存の問題を解決する方法

不言
不言オリジナル
2018-06-15 10:26:481738ブラウズ

この記事では、主に 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");

#おそらく、次のような疑問が生じるかもしれません。「ドメイン名が異なる場合はどうなるのですか?」これは、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. セッション データの一貫した保存場所を実現する方法

セッション データはデフォルトでサーバーの tmp ファイルに保存され、サーバーのメモリに保存されるのではなく、ファイルの形式で存在します。すべてのドメインでアクセスできるように変更する必要があります。データベースストレージ、ファイルストレージ、メモリストレージをオンラインで導入し、セッションデータの保存にデータベースを使用し、Webサイトへのアクセス数が多い場合、データベース上でSESSIONの読み書きが頻繁に発生し、効率が大幅に低下します。次の session.rar では、メモリの存在が考慮されます。

yii2 でこの問題に対処するには、インターネット上にあるチュートリアルによる成功した構成は次のとおりです。

フロントエンドの構成フォルダーの 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,
],

これは、次のユーザーとセッションにあります。設定項目 ドメインを書き留めます。例: 'domain'=>'.baidu.com'。

上記は内容全体です。この記事が皆さんの学習に役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトに注目してください。

関連する推奨事項:

Yii フレームワークでの jquery の使用に関する関連問題

以上がYii2 でのドメイン名間のセッション共存の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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