2012-03-24 86 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?

或许更多一点代码来显示你正在努力实现什么?