前言
首先要指出的是,這裏的跨域訪問,應該細分爲跨域頁面訪問和跨域信息採集。現在具體來分析說明一下
跨域頁面訪問
原因
這種方式主要出現在多個系統集成的情況下,主系統以iframe或frameset的方式將其他子系統的頁面嵌進來。由於安全原因瀏覽器會阻止iframe或frameset的cookie,由於SESSION需要以內存cookie的方式存儲id到客戶端,因此SESSION將一起失效。
PS:如果在嵌入頁面內部操作的話,不會有跨域問題,該問題僅在多處嵌入的情況下發生.
解決辦法
在子系統的登錄代碼中加入P3P的認證,即允許第三方讀取cookie,這樣cookie值才能被瀏覽器正確的讀取並保存。代碼如下:
response.setHeader("P3P","CP=CAO PSA OUR");
跨域信息採集
原因
這種方式主要出現在Web2.0利用AJAX採集跨域系統數據的時候,如採集氣象網站的天氣預報信息。出現的主要原因是使用AJAX方式跨域調用,同樣出於安全性考慮XMLHttpRequest是禁止跨域訪問的,否則你以爲採到的是一條文本信息,而實際是一條可執行JS木馬的話,你的網站可想而知。
解決辦法
- 利用script腳本訪問跨域url。該方法需要跨域系統代碼可控,輸出格式爲script腳本。客戶端可直接對腳本進行操作。
- 服務器代理模式。通過將請求發送至服務器,由服務器代理訪問跨域系統,再將輸出的內容返給客戶端。在Java中可使用apache的HttpClient。