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

PHP はクロスドメイン Cookie を実装します

WBOY
WBOYオリジナル
2016-06-21 08:58:351121ブラウズ

クッキー

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


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


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

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


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

// GET 変数が設定されており、それが Cookie とは異なる場合variable
//変数の取得 (Cookie の更新) を使用します
global $HTTP_COOKIE_VARS, $HTTP_GET_VARS;
if (isset($sessionid) && isset($HTTP_GET_VARS['sessionid']) && ($HTTP_COOKIE_VARS['セッションID' ] != $HTTP_GET_VARS['セッションID'])) {
SetCookie('セッションID', $HTTP_GET_VARS['セッションID'], 0, '/', ''); '] = $HTTP_GET_VARS['sessionid'];
$sessionid = $HTTP_GET_VARS['sessionid']; '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 "Click こちら お問い合わせください。";

?>
次の出力が生成されます:



にお問い合わせいただくには、ここをクリックしてくださいが URL に挿入されました。

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


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

http://www.domain2.com/-66543afe6543asdf6asd-/contact/
次のようになります:

http://www.domain2.com/contact /? sessionid=66543afe6543asdf6asd
そして、この URL:

http://www.domain2.com/-66543afe6543asdf6asd-/contact/?email=yes
これは次のようになります:

http://www.domain2.com/contact/?email=yes&sessionid=66543afe6543asdf6asd
これを実現するには、次のように、2 つの仮想サーバーをドメイン 1 とドメイン 2 として構成するだけです。
DocumentRoot /usr/local/www/domain1
ServerName www.domain1.com

RewriteRule の RewriteEngine ^/-(.*)-(.*?.*)$ $2&sessionid=$ 1 [L,R,QSA]
RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L,R,QSA]

;
<仮想ホストの ipaddress>
DocumentRoot /usr/local/www/domain2
サーバー名 www.domain2.com

RewriteRule ^/-(.*)-(.*?.*)$ $2&sessionid=$1 [L,R,QSA]
RewriteRule ^/-(.*)-(.*) の RewriteEngine $$2?sessionid=$1 [L,R,QSA]


これらの書き換えルールは、上記の 2 つの URL 書き換え要件を実装します。

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


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

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