2011-04-27 17 views
1

我遇到了以下問題。前端網站(www.domain.com)用於填寫屬於後端的表單(backend.domain.com)。此表單由驗證碼保護,驗證碼的參考值保存在用戶會話中(以PHP格式)。交叉(子)域名Ajax表單提交captcha

提交應該是基於Ajax的,這會給跨域帶來一些問題。因此,在www.domain.com上寫了一個小小的PHP代理。該代理請求後端的形式。當用戶提交表單時,會向代理髮出Ajax請求,代理會向後端發送驗證請求並返回結果。

所有這些工作都很好,除了在用戶會話中保存引用的驗證碼。由於前端網站將表單提交到後端,後端將爲前端使用會話。

什麼是解決這個問題的最佳方法?我想出了兩種方法。第一種方法是將驗證碼的引用包含在表單中(散列),以便不需要任何會話。另一種方法是使用iframe直接從後端包含表單。這第二種方法可能會正常工作,但感覺真的很難看。對於這樣的情況,你會有什麼建議?

更新:描述這種情形的序列圖:

​​

回答

1

感覺就像一個cookie(或會話號)的問題。爲會話設置的cookie對www網站有效,但不適用於後端網站。但是由於所有的通信都是通過您的前端進行的,您是否可以不使用前端網站進行授權?

Client     www.domain.com backend.domain.com 
    |       |     | 
    |-------visit site---------->|     | 
    |       |--get login form-->| 
    |       |<----return form---| 
    |       |set cookie   | 
    |<-return login form+cookie--|     | 
    |       |     | 
    |----submit login form------>|     | 
    |       |-----submit form-->| 
    |       |     |check cookie 
    |       |<----send reply----| 
    |<------captcha failed-------|     | 
    v       v     v 

WWW網站必須設置cookie,因爲它是與客戶溝通,但後端檢查它 - 作爲Cookie設置爲不同的域,後端無法訪問它。解決方案:www應讀取cookie並將cookie數據轉發至後端進行處理。

+0

序列圖不完全正確,我用描述情況的序列圖更新了我的問題。但你是對的,這是一個cookie /會話號碼問題。 – Intru 2011-04-28 09:00:29

+0

@Intru更新的答案,希望得到某個地方。 – boisvert 2011-04-28 11:06:10