2012-09-14 33 views
1

我的第一篇文章 - 首先必須說這個網站是偉大的 - 它給了我很多次的幫助,我不需要問一個問題。到現在!我使用PHP/MySql/JQuery運行一個Web應用程序 - 絕對一切都使用JQuery AJAX加載/發佈 - .load()和.post() 我有一些不同的客戶端使用這個Web應用程序,所有與sumdomains的形式:client1.example.com,client2.example.com,而example.com是廣告頁面。PHP/JQuery WebApp共享共同文件跨子域

當我有幾個客戶,我複製文件 - 例如,對於客戶端1將在文件夾例如所有必要的文件/客戶端1 /,而客戶端2將在例如得到一個確切的複製/客戶機程序/
作爲我的客戶的數量增長,我改變了結構,以便客戶端共享公共文件 - 現在AJAX調用將從文件夾/ example/client1去/ example

這工作正常,因爲每個客戶端子域被重定向到實際的文件夾 - 例如client1.example.com被重定向到example.com/client1 此重定向是必要的,以便AJAX調用不會因瀏覽器的「同源策略」而失敗。

導致這個問題的原因是,不同客戶端之間的普通用戶可以通過在登錄後更改URL來查看來自其他系統的信息,例如從example/client1到example/client2,由於PHP會話不是獨佔的 - 每個客戶都被視爲在同一個域上 - example.com。
爲了解決這個問題,可以使用不帶重定向的子域 - 這樣PHP會話將是獨佔的。
這樣做會導致對父文件夾的所有AJAX調用都由於相同原始策略而失敗。 :(

我研究這個跨域AJAX請求的問題,嘗試了很多不同的解決方案:

1)使用iframe隧道 - AJAX對象的父文件夾 - AJAX調用成功 - 但同樣的問題發生在PHP會話中 - 域名被認爲是example.com而不是client1.example.com

2)設置document.domain = example.com的竅門 - 似乎不起作用 - 這是一個陳舊的過時替代方法I認爲

3)設置PHP h eaders - header('Access-Control-Allow-Origin:'。$ _ SERVER ['HTTP_ORIGIN']); 完全不起作用

我不想爲ajax調用使用任何不同的庫。

目前我已經想出了兩個選項:

1)使用重複的文件爲每一個客戶,我寧願不做,因爲它是浪費空間,使更新文件的舊方法一個痛苦 - 我必須替換許多文件,而不僅僅是1.

2)在每個客戶端目錄中使用一個PHP基本文件,它將接收所有的AJAX調用,然後在父文件夾中包含請求的文件。我測試過這個,它似乎運行良好 - 所以這是我會選擇的選項,除非有人在那裏有更好的解決方案?
詳細說明此選項:
說我從子域中的頁面發佈:http://client1.example.com
而不是調用$ .post'(http://example.com/file.php'); (這將失敗)
我打電話給$ .post('http://client1.example.com/base.php',{target:'file.php'})
然後從base.php中包含(' ../'.$_REQUEST['target'])

我很高興與選項2,但它只是讓我想知道有沒有更好的方法? * 其他人遇到類似的問題? *

乾杯! Ĵ

回答

0

UPDATE

所以我選擇2去 - 創建中,所有的AJAX請求調用子域基本文件,並在此基礎文件,然後使用PHP包括獲取實際的目標文件。

工作得很好,很容易重構文件系統。從現在開始,將爲所有未來的項目使用這種方法!

0

你嘗試使用跨域XML

+0

從來沒有聽說過它。快速閱讀它 - 我懷疑它會有所作爲,因爲如果沒有滿足相同來源策略要求,Ajax請求根本不會被瀏覽器發送 - 並且這些ajax請求/瀏覽器對跨域不知情.xml文件 –

+0

閱讀這裏http://stackoverflow.com/questions/3547102/crossdomain-xml-and-ipad它不會工作。 –