jsonp实现跨域读写cookie
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(),"/"); //为了知道处理结果可以返回其他信息
2、读cookie 同样a.com中读取b.com的cookie a.com中get.php与设置的set.php相同 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 除了同步登录统一的会员验证中心也解决了多台服务器验证的问题 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |