推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
istill
V2EX  ›  Python

怎么实现多个域名共享 cookie?

  •  
  •   istill · Jun 4, 2020 · 10115 views
    This topic created in 2347 days ago, the information mentioned may be changed or developed.
    需求场景:有 3 个不同域名的网站,页面上都会显示客服的微信号,客服微信有多个,但是页面上只显示一个客服微信号。对于同一个访客,无论访客打开 3 个中的哪个网站,对该访客显示的微信号都要固定的不变的。

    我本想对访客设置 cookie,cookie 中记录访客第一次访问时显示的哪个微信号,以后再访问这 3 个网站时都显示这个微信号。但是 cookie 不能跨域,aaa.com 的 cookie 在访问 bbb.com 时不会自动发送。

    所以想在 3 个网站的 HTML 中再加入同一个访问,比如:<img src="http://abc.com/111.png">,111.png 是很小不可见的图片,只为发起请求用,然后再对 abc.com 设置 cookie,也从 abc.com 获取 cookie,从而达到跨域的目的。

    不知这个思路行不行,如果不行,请指点一下新思路,感谢!
    21 replies  •  2020-06-24 16:08:56 +08:00
    faceRollingKB
    faceRollingKB
    Jun 4, 2020
    2
    同域名下的子域名可以,但不同域名的话,一旦你实现了,那就是浏览器漏洞
    lululau
    lululau
    Jun 4, 2020 via iPhone
    3
    第三方 cookie
    lululau
    lululau
    Jun 4, 2020 via iPhone
    4
    思路差不多,但是 ABC 设置的 cookie,aaa 的前端是读不了的,你需要让 ABC 的 server 去告知 aaa 或 bbb (就是当前访问的页面的服务)的 server 当前用户的 cookie 值
    amundsen
    amundsen
    Jun 4, 2020
    5
    系统一开始设计成单点登录,就很方便了
    Nich0la5
    Nich0la5
    Jun 4, 2020
    6
    交给后端处理吧
    hantsy
    hantsy
    Jun 4, 2020
    7
    Cookie 在浏览器上能够直接跨域就完了谈什么安全性。

    不过可以用类似 token 的东西,前端允许不同域名之间传递,后台服务器检测有效性。

    在 a 上拿的 token, 转到 b 时链接加上 http://b/?t=token,后台保证它在 a,b 两个域名上都是合法的。
    gitjavascript
    gitjavascript
    Jun 4, 2020
    8
    oss
    imdong
    imdong
    Jun 4, 2020
    9
    <script src="//control.center/load_config.js">

    然后所有页面引用这个 js,从这个 js 中获取信息。
    jugelizi
    jugelizi
    Jun 4, 2020 via iPhone
    10
    哦。第一 你这个可以是 sso
    a 域名可以请求 b 域名并通知它种下 cookie

    或者向楼上说的 客服号码用公共的第三方接口获取 那么不管哪个网站都是一样的身份
    strawberryBug
    strawberryBug
    Jun 4, 2020
    11
    不同网站的话设置子域名一样就可以了,比如 aaa.nihao.com 和 bbb.nihao.com ,把 cookie 加到.nihao.com 就可以实现共享
    boshan927
    boshan927
    Jun 4, 2020
    12
    我提供一个思路。

    可以使用浏览器指纹( fingerprintjs2.JS )绑定这个浏览器,然后通过是 9 楼的思路,所用页面引用同一个 JS,这个 JS 是用来操作指纹和 cookie 的。大致上就是这样。

    不过据说 fingerprintjs2.JS 指纹会有重复的现象。
    yuzo555
    yuzo555
    Jun 4, 2020
    13
    统一的 API 中心域名就行了吖。。
    Tink
    Tink
    Jun 4, 2020 via iPhone
    14
    sso
    ClericPy
    ClericPy
    Jun 4, 2020
    15
    这种一般在后端更简单点

    前端的话, 别用 Cookie 用 localStorage sessionStorage 试试?
    imdong
    imdong
    Jun 4, 2020❤️1
    16
    其实,我写的 //control.center/load_config.js 后端是对应的动态程序。

    这个动态程序是可以设置并获取 cookies 的,并且 Cookies 和被放置的网站无关。

    假设是 PHP,那么我们大概应该是这样的。

    Nginx: rewrite /load_config.js /load_config.php;


    ```load_config.php
    <?php

    $wechat_list = ['abc123', 'def456','ghi789'];
    $wechat = $_COOKIE['wechat'] ?? null;
    if (empty($wechat)) {
    $wechat = $wechat_list[array_rand($wechat_list)];
    setcookie('wechat', $wechat);
    }

    printf('var wechat = %s;', $wechat);
    ```
    zarte
    zarte
    Jun 5, 2020
    17
    sso
    另外弄个登录站,登录的时候 js 调登录站的成功后再登录本站或者直接用登录站的登陆信息。
    zky001
    zky001
    Jun 5, 2020
    18
    jwt
    lululau
    lululau
    Jun 5, 2020
    19
    想了想,不需要后端 server 之间的交互, cookie 由 abc.com 种植,a.com 向 abc.com 发送一个请求,abc.com 就能拿到自己域下的 cookie 值,然后 abc.com 对这次请求 redirect 回 a.com ,并且在 redirect location 中附上包含 cookie 值的 query parameter 就可以了
    zenzhu
    zenzhu
    Jun 5, 2020
    20
    http://subinsb.com/set-same-cookie-on-different-domains/ 用 img set cookie google youtube 都是这么搞的
    Shikyou
    Shikyou
    Jun 24, 2020
    21
    像 auth0 和 authing 这一类用户认证云服务,可以快速实现用户跨域登录
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1455 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 124ms · UTC 05:04 · PVG 13:04 · LAX 21:04 · JFK 00:04
    ♥ Do have faith in what you're doing.