关于jsonp的介绍、json与jsonp的区别可以看一下这篇文章http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html
javascript是无法跨域读写cookie的,如果想在其他域写cookie一般可以隐藏一个iframe去访问这个域,让它来写入,jsonp提供给我们一个更好的选择,可以通过它来实现跨域操作
1、写cookie(以jquery实现)
有两个web,域名分别是a.com、b.com,现在希望在a.com操作写入b.com的cookie(当然a.com也无法通过正常的方式读到这个cookie,这样可以让b.com读到);
a.com中set.PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>跨域设置b.com中cookie</title> <Meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <script type="text/javascript" charset="utf-8" src="jquery-1.9.1.min.js"></script> <body> <script type="text/javascript"> $(document).ready(function(){ $.ajax({ url:'http://b.com/setcookie.php', dataType:"jsonp",jsonp:"jsonpcallback",success:function(data){ alert(data.res); } }); }); </script> </body>
b.com中setcookie.PHP:(正常设置cookie)
<?PHP $callback = $_GET['jsonpcallback']; setcookie("Q",time(),"/"); //为了知道处理结果可以返回其他信息
这时访问a.com/set.PHP,再看一下b.com下的cookie是不是有了Q?
2、读cookie
同样a.com中读取b.com的cookie
b.com中getcookie.PHP:
$callback = $_GET['jsonpcallback']; $cookie = json_encode($_COOKIE); echo $callback."(".$cookie.")";
为什么要跨域读写cookie呢?说一个常见的应用场景:单点登录(sso)
单点登录简单的说就是有多个系统,域名可能不同,但是共享同一套会员体系,在任何一个系统登录后在其他系统都同步登录。
比如天猫(tmall.com)、淘宝(taobao.com)、阿里巴巴(1688.com)这三个网站,如果我在淘宝登录了,当我再打开天猫、阿里巴巴时也是默认登录的
一般每个子系统都是单独验证用户信息的,但是系统多了为了更好的体验就需要同步登录,解决这种问题的做法是单独出用户体系,所有的子系统用户的登录、退出都在这个会员中心进行
仍然以阿里为例,假设其会员中心为user.alibaba.com,当在淘宝登录时会去会员中心验证用户信息,验证通过则返回用户信息,同时在user.alibaba.com中设置登录信息的cookie(比如user_id=123456)这一步就是跨域写cookie,当淘宝需要检查用户是否登录时也要在会员中心进行,验证时需要根据cookie信息,但是包含登录信息的cookie在user.alibaba.com域下,所以需要跨域读cookie
原文链接:https://www.f2er.com/json/290280.html