2014-03-13 87 views
2

使用PHP,是否可以將發佈數據發送到另一個域而不使用表單?將PHP用於跨域發佈數據

header('location:https://domain.com/webservice/?data=My Data'); 

我們不能使用上面,因爲GET數據存儲在個人瀏覽器的歷史,並在我們的一些服務器日誌(不理想)的解決方案。

curl_init(); 

因爲/webservice/使用header('location:')將用戶重定向到最終的目標網頁和curl_init()捕獲的響應,而不是給它的數據,我們無法使用此解決方案 - 我們的目標是讓用戶變區域以及發佈的數據。 /webservice/還與用戶創建了一個新的會話,這就是爲什麼他們需要在發佈數據的同一位置。

任何人都有一個外部的想法?

+0

這兩個域在同一個服務器/主機帳戶上嗎? – itsols

+0

不,有許多衛星服務器運行在不同的域上,都需要訪問一箇中心域。它是同一系統的一部分,但基礎設施非常分散。 – OrangeFrog

回答

3

您可以從您的PHP程序發出POST請求(請參閱cURL庫),但無法重定向瀏覽器以使其發出POST請求。

要做到這一點的唯一方法是生成一個窗體和POST(可以使用JS完成)的HTML文檔。

0

這是我的解決方案,只要這兩個域可以共享同一個數據庫。

步驟:

  1. 生成一個值來唯一地標識本次會議。最好使用一些簡單的編碼。
  2. 將數據寫入數據庫中的表格。如果不是單個字段,即使是BLOB字段中的xml結構也可以,但這是額外的工作。
  3. 使用查詢字符串到第二域從DB

通過標識和獲取數據。此外,你可以有一個狀態字段來超時數據刪除的記錄,如果它不是內讀一段時間。

嗯,這只是一個想法,但我認爲這是一個可行的隱藏你的數據在一定程度上相比,發送全部在查詢字符串。

+0

這個想法可能是在正確的方向,但它仍然依賴於使用查詢字符串來傳遞數據(不安全)。這種工作環境非常公開,我們擔心可能存儲在瀏覽器歷史記錄中的任何內容(即使數據只響應幾秒鐘)。從理論上講,可以使用您在第3步中指出的標識符來破壞數據。 – OrangeFrog

+0

您確定它不安全嗎?我猜最多數據將持續15秒鐘。你需要多長時間才能弄清楚** fslkj4390-8f **這樣的密鑰?是的,查詢字符串對'數據'可能是危險的,但我認爲這種方法不好。 – itsols

+0

帶有自動化腳本的數據包嗅探器檢測到出站標識符並將其中繼到目標服務器可能會在1-2秒內破壞這一點 - 可能比合法用戶更快。 如果請求生成了一個SALT,它生成了密鑰,並且SALT通過curl_init()傳回給用戶,我們可以使用它來生成一次只能訪問一次的標識符......(也許這就是你意思是) 如果標識符只有「活着」10秒,並在一次訪問後自行清除,這將是不安全的?其他人對此有何反饋? – OrangeFrog