我遇到了跨域AJAX請求的問題。
三臺服務器都參與了這一問題。我們可以稱它們爲A1,A2和B。
A1和A2運行相同的應用程序代碼。它們是同一個Web應用程序的兩個分段實例。 B是另一個Web應用程序。
我們需要執行從甲 web應用到乙應用跨域AJAX請求。我們嘗試啓用CORS,但在IE < = 8中難以令人滿意地工作,所以現在我們使用的是nginx代理規則。因此,該流程是:瀏覽器AJAX請求 - >A1或A2 - > nginx的代理 - >乙
乙是有狀態的,並且需要用戶的會話cookie起作用。
我們所看到的是,這個使用服務器當A1,但使用服務器A2,乙不能拔出cookie時工作正常。
我已經看過來自A1和A2的請求的標題,它們是相同的。兩人都在標題中的Cookie線,都具有相同的起源等
在乙我們看到的是,$ _COOKIE [「session_key可以」]是空當請求來自A2但正確填寫當請求來自A1。
奇怪的是,它只是缺少從頭中的cookie中提取一個特定的Cookie密鑰,並且只有當請求來自A2時。它解析頭文件中的所有其他cookie,從A2罰款,它只是不能解析用戶的會話cookie由於某種原因,但它可以很好,如果請求來自A1。
我已經使用了tcpdump,並且對它們中的每一個都採用了pcap,並對它們進行了區分,並且頭文件中沒有任何內容看起來特別不同。
我發現這個堆棧溢出的問題,人們說這是因爲他的cookie頭字符串太長:What could cause cookie to not be set in $_COOKIE when it's in $_SERVER我不認爲這太長,因爲我的只有249個字符長,在成功和失敗的情況下。
我在考慮從$ _SERVER中取出cookie並手動解析它們,但這聽起來很蠢,我寧願找出潛在的問題。
在A1和A2服務器上是否爲用戶設置了會話?會話數據是如何在服務器上創建的?他們是同一臺機器嗎? – voncox