ホームページ >php教程 >php手册 >クロスドメイン Cookie を実装する

クロスドメイン Cookie を実装する

WBOY
WBOYオリジナル
2016-06-21 09:14:52989ブラウズ

クッキー

Cookie は、Web 開発者がユーザーをログイン状態に保つことを可能にする素晴らしい発明です。ただし、サイトまたはネットワークに複数のドメイン名がある場合、問題が発生する可能性があります。


Cookie の仕様によれば、Cookie は 1 つのドメイン名に対してのみ使用でき、他のドメイン名に送信することはできません。したがって、ブラウザーで 1 つのドメイン名に対して Cookie が設定されている場合、その Cookie は他のドメイン名に対しては無効になります。ユーザーがサイトの 1 つからログインし、他のドメインからもログインできるようにしたい場合、これは大きな問題になる可能性があります。


私のソリューションでは、次の一般的なフレームワークを使用します:

GET または COOKIE を通じて渡されたセッション ID 番号を受け入れるために、プリセット スクリプトが使用されます。 COOKIE よりも GET
変数が優先されます。したがって、クロスドメイン名を参照する必要がある場合は常に、URL パラメータとして sessionid を送信します。
Apache 構成を変更して、すべてのクロスドメイン名 Cookie を書き換えます。その理由はすぐに明らかになるでしょう。
クロスドメイン参照が発生するたびに変数を使用します。
ステップ 1: プリセット スクリプトを作成する
次のコードをプリセット スクリプトに追加します (または、すべてのスクリプトの前に関数に追加します)。


/* クロスドメイン Cookie をサポートします... */

// GET 変数が設定されており、Cookie 変数と異なる場合
// get 変数を使用します (Cookie を更新)
グローバル $ HTTP_COOKIE_VARS, $HTTP_GET_VARS;
if (isset($sessionid) && isset($HTTP_GET_VARS['sessionid']) && ($HTTP_COOKIE_VARS['sessionid'] != $HTTP_GET_VARS['sessionid'])) {
SetCookie ('セッションID ', $HTTP_GET_VARS['セッションID'], 0, '/', '');
$HTTP_COOKIE_VARS['セッションID'] = $HTTP_GET_VARS['セッションID']
$セッションID = $HTTP_GET_VARS['セッションID' ];
}

?>

このコードが実行されると、グローバル 'sessionid' 変数がスクリプトで使用できるようになります。ユーザーの Cookie 内の
sessionid 値、または GET リクエストを通じて送信された sessionid 値を保存します。


ステップ 2: すべてのクロスドメイン名参照に変数を使用する
切り替え可能なドメイン名の基本的な参照形式を保存するグローバル構成ファイルを作成します。たとえば、
domain1.com と domain2.com がある場合、次のように設定します:


$domains['domain1'] = "http://www.domain1.com/- $sessionid-" ;
$domains['domain2'] = "http://www.domain2.com/-$sessionid-";

?>

ここで、コード内で次のことを実行するとします。

echo "お問い合わせいただくには、ここをクリックしてください。"; ?> 次の出力が生成されます:

ここをクリック contact us

ここではURLにセッションIDが挿入されています。

この時点で、「これにより、Web サーバー上で、horizo​​ntal Lines、sessionid、horizo​​ntal Lines という名前のサブディレクトリが開かれる可能性がある!?!?」と思われるかもしれません。
ただし、次の手順では、それを機能させるために必要なトリックを提供します。


ステップ 3: Apache を構成する
ここで、残りの手順は、この URL を書き換えるように Apache を構成することです:

http:// www.domain2.com /-66543AFE6543ASDF6ASD-/CONTACT/CONTACT/
http://www.domain2.com/contact/?sessionid = 66543afe6543asdf6asd
およびこのurl:

http://www.domain2 .com.com/-6653afe653af653 -/contact/?email=yes
次のようになります:

http://www.domain2.com/contact/?email=yes&sessionid=66543afe6543asdf6asd
これを実現するには、単純に 2 つの仮想サーバーを、domain1 と domain2 として構成します。次のように動作します:


DocumentRoot /usr/local/www/domain1
ServerName www.domain1.com
RewriteRule の RewriteEngine ^/-(.*)-(.*? .*)$ $2 &sessionid=$1 [L,R,QSA]
RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L,R,QSA]



DocumentRoot /usr/local/www/domain2
ServerName www.domain2.com
RewriteRule の RewriteEngine ^/-(.*)-(.*?.*)$ $2&sessionid=$1 [L, R,QSA]
RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L,R,QSA]


これらの書き換えルールは、上記の 2 つの URL 書き換えリクエストを実装します。

結論
Apacheの書き換え機能と変数を組み合わせることで、クロスドメインCookieを簡単に実装することができます。このような
システムを維持したい場合は、クロスドメイン名にリンクするときは常に、ドメイン名変数を使用する以外に何も使用しません。 Cookie は正常に機能するため、ドメイン名内のリンクを変更する必要はありません。

運用ネットワークでのシステムの動作を確認したい場合は、http://www.familyhealth.com.au/ にアクセスしてください。
クロスドメイン リンクの一部の上にマウスを移動し、クリックしたときにリンクがどのように書き換えられるかを確認してください。

おそらく、このテクノロジーを使用する場合の唯一の問題は、ユーザーのブラウザー内のすべてのドメイン名の Cookie を削除できないことです。





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