learning-note icon indicating copy to clipboard operation
learning-note copied to clipboard

cookie cross domain

Open jackPanyj opened this issue 8 years ago • 0 comments

虽然localStorage是很好用,但是它并不支持跨域访问,有些时候我们需要跨域访问,就只能用 cookie

下面介绍两个cookie跨域情况

  1. 二级域名之间的跨域问题

    如果我想在同一个主域名下实现通信,比如 www.baidu.comzhidao.baidu.com, 它们之间如何通信呢?。

    在设置cookie的时候可以填写在哪个域名下生效的。

      var LastReportGenerated="Jul 11 2013",
      baseDomain = '.baidu.com',
      expireAfter = new Date();
    
      // 设置过期时间
      expireAfter.setDate(expireAfter.getDate() + 7);
    
      // 添加cookie
      document.cookie="Report={'ReportName':'MainReport', 'lastGenerated':" + LastReportGenerated + "}; domain=" + baseDomain + "; expires=" + expireAfter + "; path=/";
    

    重点: domain=".baidu.com", path="/"

    这样设置的cookie就可以在所以.baidu.com的域名下访问了。

  2. 完全没有关系的两个域名之间的跨域问题

    比如www.baidu.comwww.jd.com之间如果想通信怎么办呢 这个时候就需要后端的配合了。

    首先当你登录www.baidu.com的时候会设置一个cookie, 然后发一个请求到www.jd.com 这个时候京东的服务端就知道你登录了百度账号,然后就可以在服务端设置一个cookie

      <!DOCTYPE html>
      <html>
      <head>
      <script>
       // 在这设置自己的cookie
       //
       //
      </script>
      </head>
      <body>
    
      <!-- 在这设置其他的cookie -->
      <img src="http://jd.com/cookies.php" style="display:none;" />
      </body>
      </html>
    

    主要利用了img标签向京东的服务器发送请求

    京东收到请求后处理一下就可以了

      <?php
      setcookie("百度", "登录了", time()+3600);
      ?>
    

    通过这种方式,当你登录百度的时候有可能你的京东账号也登录了。

jackPanyj avatar Aug 24 '16 02:08 jackPanyj