2012-03-24 90 views
1

時,我有一個jQuery的小部件,(使用JsonNp)在另一個域從服務器獲取數據。服務器從會話中返回數據。 我的問題發生在Safari(其他瀏覽器的作品)。當我向服務器發出請求時,它每次都會爲新會話返回數據。發生這種情況是因爲會話ID存儲在cookie中(但Safari瀏覽器默認情況下不允許保存第三方跨域Cookie)。的3rdParty餅乾問題使用跨域AJAX

我試圖從改變會話狀態cookie的自動檢測,但是會議沒有在Safari工作。

而且我嘗試了下面的技巧,但它不爲我工作的一些原因:

$(function(){ 
    $('body').append('<iframe id="cookiesHackFrame" name="cookiesHackFrame" src="http://mysite.com/" style="display:none;"></iframe>'); 
    $('body').append('<form id="cookiesHackForm" action="http://mysite.com/" method="post" target="cookiesHackFrame" >'); 
    $('#cookiesHackForm').submit(); 
}); 
+0

希望我這個問題的描述很清楚... – 2012-03-24 09:16:27

回答

3

好吧......既然Safary阻止第三方跨域餅乾...有沒有辦法解決方案...任何解決方案將是安全策略的「突破」......這可能不會發生,只有兩種方法可以解決: 1)更改瀏覽器設置....但是,這是用戶可以做...而不是服務器,所以一旦發現問題,人們可能會提醒用戶更改安全設置。

2)3D黨的服務器發送信息,把cookie中的主服務器,反過來發出的cookie。這種方式避免了跨域。這兩臺服務器可以通過網絡服務進行通信(效率不高,但工作正常)。

+0

ermmm那不好,這個小部件應在任何網站安裝,所以我不能使用secont方式...關於使用無Cookie = UseUri什麼?我會試着再次測試它爲什麼不起作用並告訴你結果。此外,如果我在新標籤中打開網址,它將成爲所有使用小部件的網站上的作品!所以我希望一些解決方法應該是...無論如何,謝謝 – 2012-03-29 17:16:24

+1

mvc不支持在uri中編碼的會話。但是,由於小部件始終保持在同一頁面中,因此它可以將會話標識存儲在隱藏字段中,並在每次更新時將其發送到服務器。 – 2012-03-29 20:23:27

+1

如果用戶與iframe中的內容交互,Safari允許使用Cookie。 – Josh 2012-03-30 13:29:37

1

稍硬理解你的問題,但如果你需要從你的cookie發送的數據 - 只是編碼到你的請求(POST/GET)到其他服務器。你能否也傳遞會話ID?

或許更多一點代碼來顯示你正在努力實現什麼?