我在domain.com
中有一个页面,它向.getJSON()
中的URL发出JSONP ajax请求(使用jQuery的anotherdomain.com
函数)。我想(读:假设)anotherdomain.com
中的资源可以对该域中设置的任何cookie进行服务器端访问,但情况似乎并非如此?
ajax调用专门用于访问特定的cookie,进行一些数据操作并返回由cookie值键入的丰富信息集。原始域没有直接访问cookie值,所以我认为ajax请求将保持我需要的状态。
我忽略了哪些关于cookie的重要信息?我很累,我只是没有看到它。
感谢。
更新
我找到了一种方法,但它看起来像JSONP,所以我想知道为什么这种方式有效,而Ajax版本没有。请求是否与浏览器会话断开连接,以便无法访问cookie?
<script type="application/x-javascript" src="<?php echo $service_url . '&callback=interests' ?>"></script>
<script type="text/javascript">
function interests( data ) {
$( function() {
var c_behaviors = data.length;
var ids = [];
for( var i = 0; i < c_behaviors; i++ ) {
ids.push( data[i].behavior_id );
}
$('body').append( '<p><label>Returned:</label> ' + ids.join( ', ' ) + '</p>' );
});
}
</script>
答案 0 :(得分:10)
The same origin policy applies所有ajax请求,因此如果在ajax调用中访问的域与浏览器中加载的域(document.host)不同,则与请求的URL中的域关联的所有cookie都不会被送了因此,JSONP方法之所以有效,是因为它在窗口中写出了一个新的脚本标记,其行为类似于浏览器可以对外部域发出的任何资源请求(因此传递与该域中的域相关联的所有cookie)。我还通过简单地从我的chrome控制台调用$.post("http://atdmt.com")
来确认这一点,而在浏览器中的stackoverflow.com上(我的浏览器中唯一一个有cookie的域,同时写了答案)并且它没有发送请求标头中的任何Cookie。
解决维护 anotherdomain.com 状态问题的另一个解决方案是让 anotherdomain.com 设置第一方Cookie(不设置域属性) ()以及 anotherdomain.com 的ajax / json请求通过javascript访问这些cookie并使用标准HTTP参数推送它们。
希望我有所帮助。
答案 1 :(得分:1)
之前我遇到过同样的问题。我发现的问题是,当不符合相同的原始策略时,大多数浏览器都不允许您建立会话(即设置会话cookie)。