2012-09-11 49 views
0

我有一個web服務(abc.com)爲我的公司用自己的用戶數據庫,它工作得很好。現在我的公司希望添加一些額外的服務,這些服務位於與另一個域(xyz.com)完全不同的服務器上,但仍然使用來自abc.com的相同登錄數據,因爲我們完全控制它並且會有類似的像xyz.com這樣的服務器,因此只需在xyz.com上導入用戶數據庫就沒有問題了。跨多個域的PHP會話

我首先想到的是同時提交由xyz.com登錄表單用我checkuser.php從abc.com但後來我瞭解到,會話cookie的東西被綁定到該域。至少我是這麼理解的。

之後,我想通過AJAX來訪問我的checkuser.php和HTTPS,並提交通過POST加密xyz.com會話數據。這也失敗了,因爲出於安全原因,AJAX似乎不適用於多臺服務器。

現在我的想法和不知道我怎麼能securly驗證了用戶在使用我們的用戶數據庫中的外服務器上。

+0

您可以使用PHP捲曲它從1個域發佈到另一個http://php.net/manual/en/book.curl.php –

回答

2

我會使用單點登錄(SSO)而不是共享會話。這樣,你就不會讓站點代碼相互依賴。如果您稍後決定在其中一個網站上更改某些內容,則沒有理由擔心其他網站上的功能遭到破壞,如果您選擇鏈接到新網站,則可以重新使用相同的解決方案。

更棒的是,有人已經使它成爲你,它甚至可能會更安全,你就可以創造自己的東西。

Wikipedia對SSO一些很好的一般知識。另外,請查看OAuth和OpenID。將這些術語與PHP結合起來,搜索應該能讓你走上正確的軌道。

+1

謝謝!我發現這個SSO庫(https://github.com/jasny/SSO),它很容易使用。現在我只需要爲我的用途採納它:) – Kirodema

0

另一種選擇是簡單地對xyz.com的登錄功能直接連接到abc.com的數據庫來檢查的登錄名和密碼。然後你使用xyz.com的數據庫來處理其他的事情。此外,如果您真的希望將會話信息存儲在abc.com上的數據庫中而不是臨時文件中,那麼您還可以從xyz.com訪問該數據。 Here是如何做到這一點的一個例子。

0

我一直沒有使用php很長時間,自己也沒有遇到過這個問題,但是,我一直在努力打開這本書,並遇到了一個答案,我的幫助你。

如果您只是嘗試訪問服務器xyz.com上的腳本和數據庫,則可以從位於單獨服務器(abc.com)上的腳本中使用其url或IP地址從字面上獲取腳本的內容,使用下面的函數:

/* This example allows my example script on server mvc.com 
to access the script on oreilly.com */ 
file_get_contents("http://oreilly.com"); 

因爲你是遠程訪問的代碼,我走在這裏瞎猜,我認爲的file_get_contents()將允許您通過$ _ POST或設置變量$ _GET方法從服務器xyz.com上的腳本中發送,並將值發送到服務器abc.com上的腳本。然後,您可以將這些變量存儲在位於單個服務器上的$ _SESSION變量中,該服務器負責處理原始$ _SESSION變量和大部分處理。

如果您需要頻繁地來回轉換,它可能會成爲服務器之間相當複雜的「捕捉遊戲」,但我認爲如果您無法將數據移動到單個服務器上服務器。如果您很好地規劃了腳本的結構,這將允許您將這些$ _SESSION變量全部存儲在一個地方。