推荐学习书目
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 · 9611 views
    This topic created in 2197 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
        2
    faceRollingKB  
       Jun 4, 2020
    同域名下的子域名可以,但不同域名的话,一旦你实现了,那就是浏览器漏洞
    lululau
        3
    lululau  
       Jun 4, 2020 via iPhone
    第三方 cookie
    lululau
        4
    lululau  
       Jun 4, 2020 via iPhone
    思路差不多,但是 ABC 设置的 cookie,aaa 的前端是读不了的,你需要让 ABC 的 server 去告知 aaa 或 bbb (就是当前访问的页面的服务)的 server 当前用户的 cookie 值
    amundsen
        5
    amundsen  
       Jun 4, 2020
    系统一开始设计成单点登录,就很方便了
    Nich0la5
        6
    Nich0la5  
       Jun 4, 2020
    交给后端处理吧
    hantsy
        7
    hantsy  
       Jun 4, 2020
    Cookie 在浏览器上能够直接跨域就完了谈什么安全性。

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

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

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

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

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

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

    前端的话, 别用 Cookie 用 localStorage sessionStorage 试试?
    imdong
        16
    imdong  
       Jun 4, 2020   ❤️ 1
    其实,我写的 //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
        17
    zarte  
       Jun 5, 2020
    sso
    另外弄个登录站,登录的时候 js 调登录站的成功后再登录本站或者直接用登录站的登陆信息。
    zky001
        18
    zky001  
       Jun 5, 2020
    jwt
    lululau
        19
    lululau  
       Jun 5, 2020
    想了想,不需要后端 server 之间的交互, cookie 由 abc.com 种植,a.comabc.com 发送一个请求,abc.com 就能拿到自己域下的 cookie 值,然后 abc.com 对这次请求 redirect 回 a.com ,并且在 redirect location 中附上包含 cookie 值的 query parameter 就可以了
    zenzhu
        20
    zenzhu  
       Jun 5, 2020
    http://subinsb.com/set-same-cookie-on-different-domains/ 用 img set cookie google youtube 都是这么搞的
    Shikyou
        21
    Shikyou  
       Jun 24, 2020
    像 auth0 和 authing 这一类用户认证云服务,可以快速实现用户跨域登录
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1321 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 17:17 · PVG 01:17 · LAX 10:17 · JFK 13:17
    ♥ Do have faith in what you're doing.