加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

jsonp实现跨域读写cookie

发布时间:2020-12-16 19:18:51 所属栏目:百科 来源:网络整理
导读:关于jsonp的介绍、json与jsonp的区别可以看一下这篇文章 http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html javascript是无法跨域读写cookie的,如果想在其他域写cookie一般可以隐藏一个iframe去访问这个域,让它来写入,jsonp提


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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读