2010-07-06 84 views
1

好的,這裏是大圖片,我有2個站點,稱它們爲SiteA和SiteB。 SiteA在電子商務交易中充當主站點(我們在我們的信用卡處理公司中只有一個帳戶,所以成功/拒絕的交易重定向到SiteA)在Rails應用程序之間發佈數據

因此,用戶登錄到SiteB,通過購買程序並提交表格,並將信息卡細節發送給信用卡驗證公司,一旦交易成功,SiteA將收到信用卡處理公司發送的所有必要信息(以POST方式)。在這一點上對站點A的代碼的基礎上,PARAM確定事務源自哪個站點和使用此代碼

Net::HTTP.post_form(URI.parse("http://#{params[:site_name]}/success"), params) 

success再次帖子在routes.rb中被定義爲

map.connect 'success', :controller => "some_controller", :action => "success" 
的數據到該網站

然而問題是,儘管用戶在SiteB上登錄,但當SiteB收到SiteA發佈的數據(顯然不知道SiteB的session_id)時,由於缺少會話信息,SiteB上數據的進一步處理失敗。

這兩個網站都運行完全相同的代碼。

我的問題,有沒有一種方法可以請求SiteB的會話數據,並在SiteA發送數據時將其附加到Post數據。

非常感謝

回答

1

如果這兩個網站在同一臺物理機器上運行,你可以隨時使用類似的Memcache作爲一種簡單的方法來兩個原本不相關的網站之間交換狀態信息。如果他們在不同的機器上,使用POST可能是你唯一合理的選擇,儘管它最終會變得更麻煩。

如果SiteB必須轉發到SiteA進行一些處理,並且SiteA需要將訪問者返回到SiteB,則需要在這兩個應用程序上創建一個私有API。您通常可以通過創建一個簡單的REST接口並根據您的喜好以簡單的序列化格式(如YAML或JSON)轉儲所需的任何內容。

  • 訪問者從網站B經由HTTP重定向轉發到站點A:

    例如,如下的過程可能是大致。

  • 訪問者在SiteA上進行交易,並在數據庫中創建一個具有唯一標識符的記錄,該記錄反映此交易的結果。
  • SiteA使用此唯一標識符作爲參數將訪問者轉發回SiteB。
  • SiteB向SiteA發出請求以檢索此事務的詳細信息。
  • SiteB根據需要更新其內部記錄,並向訪問者呈現交易結果。

爲了安全起見,您應該生成隨機的唯一標識符,因爲諸如UUID之類的東西會阻止人們通過猜測數字來檢查任意的命令。您還應該確保調用SiteA以檢索交易詳情具有某種訪問控制,即使它只是一個祕密令牌或密碼。更強大的實現可能會使用TLS和SSL證書來驗證任何請求的來源。

相關問題