ホームページ  >  記事  >  バックエンド開発  >  PHPのクロスドメイン、クロスサブドメイン、クロスサーバーでセッションを読み取る方法の紹介

PHPのクロスドメイン、クロスサブドメイン、クロスサーバーでセッションを読み取る方法の紹介

WBOY
WBOYオリジナル
2016-07-25 09:00:021455ブラウズ
  1. ini_set('session.cookie_path', '/');
  2. ini_set('session.cookie_domain', '.mydomain.com');
  3. ini_set('session.cookie_lifetime', '1800');
コードをコピー

2.php.iniに設定します。

  1. session.cookie_path = /

  2. session.cookie_domain = .mydomain.com

  3. session.cookie_lifetime = 1800

コードをコピー

3. phpページの先頭で関数を呼び出す(1と同じ条件)

  1. session_set_cookie_params(1800, '/', '.mydomain.com');
コードをコピー

これら 3 つの方法は同じ効果があります。

ここでは、最初の方法を使用して 2 つのドメイン名 (www.mydomain.com と sub.mydomain.com) をセットアップしてテストします。 sub1.php

  1. //最初にアクセスするページを設定します
  2. ini_set('session.cookie_path', '/');
  3. ini_set('session.cookie_domain', '.mydomain .com');
  4. ini_set('session.cookie_lifetime', '1800');

  5. //

  6. session_set_cookie_params(1800, '/', '.mydomain.com');
  7. session_start ();
  8. $_SESSION['sub1'] = 'sub1';
  9. print_r($_SESSION);
  10. ?>

コードをコピー

sub2.php

  1. session_set_cookie_params(1800, '/', '.mydomain.com');
  2. session_start();
  3. $_SESSION['sub2'] = 'sub2';
  4. print_r($_SESSION );
  5. ?>
コードをコピー

アクセスシーケンス: (1)www.mydomain.com/sub1.php ページ出力: 配列 ([sub1] => sub1)

(2)sub.mydomain.com/sub2.php ページ出力: 配列 ( [sub1] => sub1 [sub2] => sub2 )

成功

2 番目の目標は、データベースを使用して SESSION データを保存することで達成できます。これにより、各サーバーが同じデータ ソースに簡単にアクセスして同じ SESSION データを取得できるようになります。または、NFS などのファイル共有を使用できます。 ) セッションデータを保存するためにデータベースを使用する場合、Web サイトのアクセス数が多い場合、SESSION の読み取りと書き込みが頻繁にデータベース上で行われる可能性があります。これを memcache に置くことができます。データベースに実装されている過去の記事があります。データベースと memcache を組み合わせるというアイデアは以前に議論されました。 memcache を単独で使用してセッションを保存するのが適切でない場合は、データベースと組み合わせることをお勧めします。

2) クロスドメイン ソリューション アイデア: これを解決するには iframe を使用しますが、ff はそれをサポートしていないため、前に p3p プロトコルを追加する必要があります。

P3P (Platform for Privacy Preferences Project) は、自分が善人であることを宣言し、ブラウザ ユーザーの行動の収集を許可するプロトコルです。 しかし実際には、誰もが自分は善人だと言いながら、裏では悪いことをしているかもしれません。 ここに意見の相違があります。 【参考】国内のほとんどのWebサイトはこのP3Pに注目していません。プライバシーの問題は外国ほど真剣に受け止められていない可能性があります (Microsoft のプライバシーに関する声明)。

最初に思いつくのは、JS を通じて Cookie を操作し、2 つの異なるドメインの Cookie が相互にアクセスできるようにすることで、上記の効果を実現することです。

以下は 2 つのステップに分かれた具体的な実装プロセスです。 1. システム A でログインに成功したら、JS を使用して非表示の iframe を動的に作成し、iframe の src 属性を使用して、ドメイン A の Cookie 値を取得パラメータとしてシステム B の b.jsp ページにリダイレクトします。

  1. var _frm = document.createElement("iframe");
  2. _frm.style.display="none";
  3. _frm.src = "http://bbs.it-home.org/setcookie.php ?mycookie=xxxxx";//xxx はここでエンコードするのが最適です
  4. document.body.appendChild(_frm);
コードをコピーします
2. setcookie.php ページの A システムに渡されたデータを取得します。 B システムは過去の Cookie 値を取得し、取得した値をユーザーの Cookie に書き込みます。もちろん、ドメインは独自のものであるため、Cookie へのクロスドメイン アクセスを簡単に実現できます。ただし、注意する必要がある問題があります。つまり、IE で閲覧する場合、この操作はサーバーでは成功しません。setokokie.php ページで P3P HTTP ヘッダーを設定する必要があります (詳細については、http://www.w3.org/ を参照してください)。 P3P/) P3P 設定コードは次のとおりです。

  1. header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');//これが ecshop の設定方法です
Copyコード

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