ホームページ >バックエンド開発 >PHPチュートリアル >PHP はセッションを使用して 2 つの異なるサーバー Web サイトへのログインを同期します

PHP はセッションを使用して 2 つの異なるサーバー Web サイトへのログインを同期します

WBOY
WBOYオリジナル
2016-06-23 14:18:54919ブラウズ

PHP セッションのクロスドメイン ログイン

現在、サーバーが 2 つあります
a:www.test1.com
b:www.test2.com
test1 にログインし、test2 にもログインしたいのですが、どうすればよいですか。どうやって書くの?

次のようなテスト コードの一部があります
test1 がログインするときに、ログインが成功したら、次のコードを実行します
$fp = pfsockopen("www.test2.com",80,$errorno,$errormsh);//连接服务器		if ($fp){    			$out = "GET /login.php?acc=".$acc."&psw=".$psw." HTTP/1.1\r\n";       			$out.= "Host:www.test2.com\r\n";       			$out.= "Connection: Close\r\n\r\n";            			fputs($fp, $out);    			fclose($fp);   		}


次に、www.test2.com のlogin.php ファイルで
$acc = $_GET['acc'];$psw = $_GET['psw'];$_SESSION['acc'] = $acc;$_SESSION['psw'] = $psw;


次に、私はwww.test2.com にアクセスしてください
セッションが空であることがわかりました
アドバイスをください。

ディスカッションへの返信 (解決策)

シングル サインオンがこれほど簡単だったら、SSO サービス プロバイダーはすべて倒産するのではないでしょうか?

セッションは、一意の識別のために Cookie によって運ばれる sessionID に依存します
そして、通常の Cookie はドメインを越えることはできません。クロスドメイン Cookie を実現するためにいくつかの技術的手段を使用することもできますが、これは結局のところルールの抜け穴を利用するものであり、お勧めできません。

Web サイトに有効期限が設定された Cookie がある場合、ブラウジング終了時に Web サイトのドメイン名を含む Cookie ファイルがブラウザのバッファに残ることがわかっています。再度 Web サイトにアクセスすると、最後に保存した Cookie が送り返されます

したがって、www.test1.com にアクセスするときに www.test2.com の Cookie ファイルを残すようにするだけで済みます
その後、同期することができますwww.test2.com にアクセスすると

滞在方法は? iframe または js を使用して、www.test1.com によって返されたページ内の www.test2.com の特定のファイルにアクセスします

もちろん、これは単なる基礎であり、考慮すべき問題はさらに多くあります

シングルサインの場合-on はとても簡単でした。そうなると、SSO サービス プロバイダーはすべて倒産してしまうのではないか?

セッションは、一意の識別のために Cookie によって運ばれる sessionID に依存します
そして、通常の Cookie はドメインを越えることはできません。クロスドメイン Cookie を実現するためにいくつかの技術的手段を使用することもできますが、これは結局のところルールの抜け穴を利用するものであり、お勧めできません。

Web サイトに有効期限が設定された Cookie がある場合、ブラウジング終了時に Web サイトのドメイン名を含む Cookie ファイルがブラウザのバッファに残ることがわかっています。再度 Web サイトにアクセスすると、最後に保存した Cookie が送り返されます

したがって、www.test1.com にアクセスするときに www.test2.com の Cookie ファイルを残すようにするだけで済みます
その後、同期することができますwww.test2.com にアクセスすると

滞在方法は? iframe または js を使用して、www.test1.com から返されたページ内の www.test2.com の特定のファイルにアクセスします

もちろん、これは単なる基本であり、考慮すべき問題はさらに多くあります
それで、上司、私にできますか?この方法で処理しますか?
www.test2.com の login.php ファイルに Cookie を作成するコードを記述します
そうですか
この方法では、www.test2.com にアクセスすると、この Cookie がページに直接送信されます。
それでは、訪問したときに クッキーの判定を追加するだけで十分ですか?

www.test1.com から返されたページから www.test2.com/login.php が呼び出されている限り
つまり、www.test1.com にアクセスしている間に www.test2.com にもアクセスしたことになります
このように www の Cookie .test1.com は www.test1.com へのアクセスに使用されます
www.test2.com の Cookie は www.test2.com へのアクセスに使用されます

只要 www.test2.com/login.php 是在 www.test1.com 返回的页面 里面调用的就可以
就是说你在访问 www.test1.com 的同时也访问了 www.test2.com
这样 www.test1.com 的 cookie 供访问 www.test1.com 用
www.test2.com 的 cookie 供访问 www.test2.com 用
怎么样才叫做在返回的页面里面调用?
www.test1.com里面index.php
使用登录成功之后访问www.test2.com的方法,这个算不算是调用了!
实际情况是这样
www.test1.com里面login.php里面登录成功之后使用,

$fp = pfsockopen("www.test2.com",80,$errorno,$errormsh);//连接服务器        if ($fp){                $out = "GET /login.php?acc=".$acc."&psw=".$psw." HTTP/1.1\r\n";                   $out.= "Host:www.test2.com\r\n";                   $out.= "Connection: Close\r\n\r\n";                         fputs($fp, $out);                fclose($fp);           }

然后后面就直接跳转会www.test1.com里面index.php页面了
www.test2.com里面login.php中就写上了cookie
setcookie("acc",$acc,time()+3600,"/");//写文件,查看是否访问以及写入cookie成功$fp = fopen("test.txt","w");fwrite($fp,"acc:".$_COOKIE['acc']);fclose($fp);


我刚才测试了一下,发现test.txt文件存在,里面也有数据
然后我就去访问www.test2.com
在页面上加入了var_export($_COOKIE);
打出来的数据并没有我写入的东西,为什么?
这样算不算老大你刚才说的“在 www.test1.com 返回的页面里面调用”

“在 www.test1.com 返回的页面里面调用”是指请求是从浏览器发出的,这样返回的 cookie 才会被浏览器保存

“在 www.test1.com 返回的页面里面调用”是指请求是从浏览器发出的,这样返回的 cookie 才会被浏览器保存

echo "<iframe style='display:none' src='www.test2.com/login.php?acc=".$acc."psw='".$psw."'></iframe>";

我在登录之后是用来这样的
别的不动,结果cookie还不没有我写入的数据,而且文件都创建不出来了,是不是我太笨了?
这写错了?还是应该用别的方法,求老大指教!

把session单独存入数据库或者memcache之类的”内存数据库”中,然后各个网站读取的时候全部从session 数据库中获取

把session单独存入数据库或者memcache之类的”内存数据库”中,然后各个网站读取的时候全部从session 数据库中获取
简单明了。大版有什么高见呢。。

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