2010-06-22 260 views
6

是否可以在我的PHP子應用程序和我的其他子域上的Ruby應用程序之間共享會話?在Ruby和PHP之間共享會話

我真的不知道從哪裏拿到它。我知道我可以手動將域設置爲根域,以便該cookie對所有子域有效,但是如何從/到會話獲取/設置內容以便在子域之間共享?

我主要想用這個來分享我的整個子域名的登錄信息。

爲了知識的緣故,如果這是一個錯誤的方法來解決這個問題,儘管這是一個可行的方法,但我想了解如何做到這一點,以及爲什麼不應該這樣做。

謝謝大家!

+0

這次聚會很晚,但我最近自己遇到了這個問題,並在我的博客上發佈了一個Rails PHP兼容會話存儲(應該很容易將原理適配到非Rails應用):http ://watsonbox.github.com/blog/2012/05/01/sharing-session-between-rails-and-php/ – 2012-07-26 21:24:10

回答

6

如果您希望以這種方式共享會話(跨越PHP/Java/Ruby /等),您需要從數據庫保存會話(並訪問它們)。

請參見:http://php.net/manual/en/function.session-set-save-handler.php

而且你需要在Ruby中相同的方法。

要共享的cookie跨域,還需要從""默認爲session.cookie_domain改變PHP會話配置選項(這將插入你的域名)到:".yourhost.com"(注意前綴期)。

2

這可以通過共享相同數據庫的應用程序來解決,也可以通過一些cookie的幫助來解決。

  • 會議在PHP
    • 打開它
    • 保存創建隨機字符串的Cookie,使用用戶憑據數據庫和時間戳字符串
  • 會話轉發到軌
    • 檢查cookie是否存在
    • 搜索中的cookie的字符串形式的數據庫
    • 如果發現匹配,那麼會被接受,並且相同的用戶憑據可用於

這將是明智的存儲某種獨特的信息工作站或瀏覽器,以便竊取會話,複製cookie不會工作。

+0

我應該存儲什麼樣的獨特信息?我應該生成什麼樣的隨機字符串?如果我彙集了關於主機的一些信息,它會「足夠安全」嗎?就像一個包含遠程主機和遠程地址的MD5散列一樣?有了這個我可以「匹配」服務器端的信息......幫助? :P – 2010-06-23 12:20:16

+0

你說得對。唯一的信息可能是來自http頭+鹽的遠程主機ip +用戶代理行的MD5哈希(如果是SHA,則更好)。 – salchams 2010-06-25 20:22:46