phpドメイン間、サブドメイン間、サーバ間セッション読み出し

7617 ワード

1.サブドメイン間およびサーバ間の解決方法
Sessionは主に2つの部分に分かれています.1つはSessionデータです.このデータはデフォルトではサーバのtmpファイルの下に格納されています.ファイル形式で存在します.もう1つはSessionデータを示すSession Idです.Session IDは、そのSessionファイルのファイル名です.SessionIDはランダムに生成されるので、一意性とランダム性を保証できます.Sessionの安全を確保します.一般にセッションの生存期間が設定されていない場合、セッションIDはメモリに格納され、ブラウザを閉じると自動的にログアウトし、ページを再要求した後、セッションIDを再登録します.クライアントがCookieを無効にしていない場合、Cookieはセッションを開始するときにセッションIDとセッションの生存期間を格納する役割を果たします.
2つの異なるドメイン名のウェブサイト、同じSessionを使いたくて、Sessionのドメイン間の問題に関わります!デフォルトでは、各サーバはそれぞれ同じクライアントに対してSESSIONIDを生成し、同じユーザブラウザに対してAサーバが生成したSESSION IDは11111111111であり、Bサーバが生成したのは222222である.なお、PHPのSESSIONデータは、それぞれ本サーバのファイルシステムに保存されています.SESSIONデータを共有するには、2つの目標を達成しなければならない.1つは、各サーバが同じクライアントに対して生成したSESSION IDが同じでなければならず、同じCOOKIEを通じて伝達することができる.すなわち、各サーバは同じPHPSESSIDというCOOKIEを読み取ることができる必要がある.もう1つはSESSIONデータの格納方法/場所であり,各サーバがアクセスできることを保証しなければならない.この2つのターゲットは,単純に言えばクライアントのSESSION IDをマルチサーバ(A,Bサーバ)が共有するとともに,サーバ側のSESSIONデータも共有しなければならない.1つ目の目標の実現は実は簡単で、COOKIEのドメイン(domain)を特別に設定するだけで(setcookie()関数の4番目のパラメータ)、デフォルトでは、COOKIEのドメインは現在のサーバのドメイン名/IPアドレスであり、ドメインが異なると、各サーバが設定したCOOKIEは相互にアクセスできないので、
1)サブドメイン間
このようにして、ドメインをまたぐことはできないが、同じサブドメイン、例えばaaa.cocoglp.comとwww.cocoglp.comはドメインに属する.cocoglp.comは可能です.では、COOKEのドメインを設定することができます.cocoglp.com,これでaaa.cocoglp.com、www.cocoglp.comなどでこのCOOKIEにアクセスできます.これにより,各サーバが同一クライアントSESSION IDを共有する目的が達成される.
次のように実現
-------------------------------------------------------------------------------------------------
ここには3つの方法があります.
1.phpページの最初(任意の出力の前、セッション_start()の前)に以下の設定を行う限り
ini_set('session.cookie_path', '/'); ini_set('session.cookie_domain', '.mydomain.com'); ini_set('session.cookie_lifetime', '1800');
2.php.iniに設定
session.cookie_path =/session.cookie_domain = .mydomain.com
session.cookie_lifetime = 1800
3.phpページの最初の場所(条件同じ)で関数を呼び出す
session_set_cookie_params(1800 , '/', '.mydomain.com');
この3つの方法は同じ効果です.
ここで私は最初の方法でwww.mydomainに設定します.comとsub.mydomain.comの2つのドメイン名をテストして、テストコードは以下の通りです
sub1.php
//先にアクセスしたページを設定する
ini_set('session.cookie_path', '/');ini_set('session.cookie_domain', '.mydomain.com');ini_set('session.cookie_lifetime', '1800');
//
session_set_cookie_params(1800 , '/', '.mydomain.com'); session_start(); $_SESSION['sub1'] = 'sub1'; print_r($_SESSION);
?>
sub2.php
session_set_cookie_params(1800 , '/', '.mydomain.com'); session_start(); $_SESSION['sub2'] = 'sub2'; print_r($_SESSION);
?>
アクセス順:
(1)www.mydomain.com/sub1.php
ページ出力:Array([sub 1]=>sub 1)
(2)sub.mydomain.com/sub2.php
ページ出力:Array([sub 1]=>sub 1[sub 2]=>sub 2)
成功
----------------------------------------------------------------------------------------------------
第2の目標の実現はデータベースを使ってSESSIONデータを保存することができて、このように各サーバーは便利に同じデータソースにアクセスすることができて、同じSESSIONデータを取得することができます;あるいはファイル共有方式、例えばNFS方式(私の他の文章ではnfsをどのように構成しているか)でsessionデータをデータベースで格納すると、サイトへのアクセス量が大きいとSESSIONの読み書きが頻繁にデータライブラリを操作してmemcacheに入れることができるという問題が残るかもしれません.データベースに格納されている前の記事が実現しました.データベースとmemcacheを結合する考え方は、前にあります.単独でmemcacheでsessionを保存するのはよくない場合は、データベースと組み合わせて操作したほうがいいです.
2)ドメイン間解決
考え方:iframeで解決しますが、ffはサポートしていないので、前にp 3 pプロトコルを追加する必要があります.
P 3 P(Platform for Privacy Preferences Project)は、簡単に言えば、プロトコルです.それは良い人だと宣言して、ブラウザのユーザーの行為を収集することを許可しましょう.しかし、現実には、自分がいい人だと言ってもいいし、裏で何か悪いことをしているのかもしれません.これが分岐点です.[参考]国内の多くのサイトは、このP 3 Pに注目していない.プライバシーの問題は海外(マイクロソフトのプライバシー声明)で重視されていないかもしれません.
まず、JSでCookieを操作し、2つの異なるドメインのcookieを相互にアクセスできるようにすることで、上記の効果を達成することができ、具体的な実現過程は大きく以下の2つのステップに分けることができると考えられる.
1、Aシステムの下で正常にログインした後、JSを利用して動的に隠れたiframeを作成し、iframeのsrc属性を通じてAドメインの下のcookie値をgetパラメータとしてBシステムの下のb.jspページにリダイレクトする.
var _frm = document.createElement("iframe");
_frm.style.display="none";
_frm.src = "http://www.222.com/setcookie.php?mycookie=xxxxx";//  xxx    
document.body.appendChild(_frm);

2、Bシステムのsetcookie.phpページでは、Aシステムから送られてきたクッキーの値を取得し、取得した値をユーザーのクッキーに書き込む.もちろんドメインは自分のものであり、簡単にクッキーのドメイン間アクセスを実現することができる.ただし、IEブラウザでこのような操作が成功するにはsetocokieが必要であるという問題がある.phpページでP 3 P HTTPヘッダを設定すれば解決できます(詳細は下記参照:http://www.w3.org/P3P/)、P 3 P設定コード:
ヘッド('P 3 P:CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");//ecshopのように設定されている
上のcpコードの意味
CURa Information is used to complete the activity for which it was provided. ADMa Information may be used for the technical support of the Web site and its computer system. DEVa Information may be used to enhance, evaluate, or otherwise review the site, service, product, or market. PSAo Information may be used to create or build a record of a particular individual or computer that is tied to a pseudonymous identifier, without tying identified data (such as name, address, phone number, or email address) to the record. This profile will be used to determine the habits, interests, or other characteristics of individuals for purpose of research, analysis and reporting, but it will not be used to attempt to identify specific individuals.  PSDo Information may be used to create or build a record of a particular individual or computer that is tied to a pseudonymous identifier, without tying identified data (such as name, address, phone number, or email address) to the record. This profile will be used to determine the habits, interests, or other characteristics of individuals to make a decision that directly affects that individual, but it will not be used to attempt to identify specific individuals. OUR We share information with ourselves and/or entities acting as our agents or entities for whom we are acting as an agent. BUS Info is retained under a service provider's stated business practices. Sites MUST have a retention policy that establishes a destruction time table. The retention policy MUST be included in or linked from the site's human-readable privacy policy. UNI Non-financial identifiers, excluding government-issued identifiers, issued for purposes of consistently identifying or recognizing the individual. These include identifiers issued by a Web site or service. PUR Information actively generated by the purchase of a product or service, including information about the method of payment. INT Data actively generated from or reflecting explicit interactions with a service provider through its site -- such as queries to a search engine, or logs of account activity. DEM Data about an individual's characteristics -- such as gender, age, and income. STA Mechanisms for maintaining a stateful session with a user or automatically recognizing users who have visited a particular site or accessed particular content previously -- such as HTTP cookies. PRE Data about an individual's likes and dislikes -- such as favorite color or musical tastes. COM Information about the computer system that the individual is using to access the network -- such as the IP number, domain name, browser type or operating system. NAV Data passively generated by browsing the Web site -- such as which pages are visited, and how long users stay on each page. OTC Other types of data not captured by the above definitions. NOI Web Site does not collected identified data. DSP The privacy policy contains DISPUTES elements. COR Errors or wrongful actions arising in connection with the privacy policy will be remedied by the service. Validate at: http://www.w3.org/P3P/validator.html Learn more at: http://www.fiddlertool.com/redir/?id=p3pinfo