要做通行证,这东西是最麻烦的,又要效率,又要方便还要考虑安全.如果遇到多域名,更是可怕.
现在就遇到了.经过折腾,总算解决了ajax 的跨域和跨域cookie问题,记录如下,方便以后使用
类如
www.eduyo.com
www.shumaquan.com
使用同一个writecookie.php 来写cookie
用的jquery的框架来做. jquery的$.getJson自带着可以跨域ajax的jsonp方式,为啥叫jsonp..你问老外吧.
其原理就是传递参数时,增加一个callback句柄,导致产生一个类似script src属性的写法,然后调用回调函数,实现了ajax的跨域访问.其具体方式网上也有一些例子.
$.getJSON("http://eduyo.com?format=json&jsoncallback=?", function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});
这是手册自带的跨域访问flickr的例子,注意url最后的callback=? 这个就是自动生成一个回调函数的参数.
在服务端脚本里,php为例,应该返回callback的值以实现回调.
<?php
$callback = $_GET["callback"];
echo $callback."(".json_encode(array).")";
?>
因为是异步,所以需要返回$callback否则.在firebug里会看到错误提示.
这样就可以实现ajax的跨域. 但是还有写cookie的问题.因为ie的安全验证问题,导致跨域是不能够在另一个域名下写cookie
而firefox就没有这个问题了.查了查原来是下面的方式
<?php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("test", $_GET['id'], time()+3600, "/", ".a.com");
?>
以上代码注意是要p3p是要在写入cookie的页上的
这个header p3p是一个头的安全验证的内容.具体原因可以查老外的文章.我直接就使用了.header出来,就可以跨域写cookie了...
(责任编辑:ken)