jsonp实现跨域读写cookie

前端之家收集整理的这篇文章主要介绍了jsonp实现跨域读写cookie前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


关于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

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

除了同步登录统一的会员验证中心也解决了多台服务器验证的问题

原文链接:https://www.f2er.com/json/290280.html

猜你在找的Json相关文章