2010-10-05 70 views
0

我有網站w1使用auhtlogic進行身份驗證,在PHP中使用w2(比如說),我想讓w2訪問由w2存儲的會話信息並將用戶登錄到w2,並檢索來自會話的user_id。如何從其他站點訪問一個站點的會話

+0

我想你的意思是你想讓w2訪問w1存儲的會話信息。 – Shreyas 2010-10-05 06:49:51

+0

@shreyas是的!我想讓w2訪問由w1 – 2010-10-05 08:56:38

回答

2

默認情況下,Rack(通過Rails用於管理其會話)通過編組會話散列(請參閱here)將會話信息存儲在cookie中,這會產生特定於Ruby的字符串。使用PHP來反序列化這些信息是非常困難的。

如果你不這樣做,你將不得不自己處理會話序列化。我認爲,一個完整的解決方案是SO一個問題的範圍,但有幾個指針:

  • 這將是明智的,只存儲會話ID在cookie中,然後保持實際的會話數據一個可以從PHP和Rails應用程序訪問的數據庫。如果您真的想將會話信息保存在cookie中(或者在memcached之類的其他位置,也需要將其序列化),請查看跨語言的序列化策略,如MessagePack

  • 你會想做些事情來確保cookie不會被用戶篡改。機架使用HMAC,這是一個很好的解決方案。我從來沒有使用PHP,但我相信他們也有一個庫。

  • 您可能已經知道這一點,但以防萬一:這都假設您的兩個應用程序共享相同的域名。如果他們不是,那麼你的用戶的瀏覽器將不會共享這兩個應用程序之間的cookie,並且你沒有什麼可以做的。例如,您可以在railsapp.yourdomain.com和phpapp.yourdomain.com之間共享會話,但不能共享railsapp.com和phpapp.com。

祝你好運!

0

我前段時間嘗試過一種解決方案,那更像是一種黑客行爲,但對於我的建議來說它工作得很好。

登錄後,我曾經將用戶的cookie寫入公共目錄中的文件中,當此用戶試圖訪問他必須訪問的另一臺服務器時,我的應用程序在第二臺服務器上,只需「知道如何訪問「存儲在第一臺服務器中的遠程文件並將該內容加載爲cookie。那時我用過CURL。

注意,它引入一些安全漏洞,很可能你的安全將依賴於「朦朧」 - 例如,算法來掛接cookie將被存儲在文件名以及如何訪問它和任何外部Web服務器配置..說,我認爲我們也可以考慮使用共享memcached來存儲cookie。

0

你有沒有考慮過使用Open ID?

+0

保存的會話信息!但我不想更喜歡這個選項 – 2010-10-05 14:51:29

相關問題