怎么实现多个域名共享 cookie? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 2020-06-04 18:05:25 +08:00 8993 次点击
    这是一个创建于 1955 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求场景:有 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 条回复    2020-06-24 16:08:56 +08:00
    faceRollingKB
        2
    faceRollingKB  
       2020-06-04 18:38:56 +08:00
    同域名下的子域名可以,但不同域名的话,一旦你实现了,那就是浏览器漏洞
    lululau
        3
    lululau  
       2020-06-04 18:39:55 +08:00 via iPhone
    第三方 cookie
    lululau
        4
    lululau  
       2020-06-04 18:52:31 +08:00 via iPhone
    思路差不多,但是 ABC 设置的 cookie,aaa 的前端是读不了的,你需要让 ABC 的 server 去告知 aaa 或 bbb (就是当前访问的页面的服务)的 server 当前用户的 cookie 值
    amundsen
        5
    amundsen  
       2020-06-04 19:33:10 +08:00
    系统一开始设计成单点登录,就很方便了
    Nich0la5
        6
    Nich0la5  
       2020-06-04 20:23:59 +08:00
    交给后端处理吧
    hantsy
        7
    hantsy  
       2020-06-04 20:30:39 +08:00
    Cookie 在浏览器上能够直接跨域就完了谈什么安全性。

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

    在 a 上拿的 token, 转到 b 时链接加上 http://b/?t=token,后台保证它在 a,b 两个域名上都是合法的。
    gitJavascript
        8
    gitJavascript  
       2020-06-04 20:32:03 +08:00
    oss
    imdong
        9
    imdong  
       2020-06-04 20:37:05 +08:00
    <script src="http://www.v2ex.com//control.center/load_config.js">

    然后所有页面引用这个 js,从这个 js 中获取信息。
    jugelizi
        10
    jugelizi  
       2020-06-04 20:52:02 +08:00 via iPhone
    哦。第一 你这个可以是 sso
    a 域名可以请求 b 域名并通知它种下 cookie

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

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

    不过据说 fingerprintjs2.JS 指纹会有重复的现象。
    yuzo555
        13
    yuzo555  
       2020-06-04 21:26:33 +08:00
    统一的 API 中心域名就行了吖。。
    Tink
        14
    Tink  
    PRO
       2020-06-04 21:59:47 +08:00 via iPhone
    sso
    ClericPy
        15
    ClericPy  
       2020-06-04 22:21:37 +08:00
    这种一般在后端更简单点

    前端的话, 别用 Cookie 用 localStorage sessionStorage 试试?
    imdong
        16
    imdong  
       2020-06-04 22:37:19 +08:00   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  
       2020-06-05 09:46:12 +08:00
    sso
    另外弄个登录站,登录的时候 js 调登录站的成功后再登录本站或者直接用登录站的登陆信息。
    zky001
        18
    zky001  
       2020-06-05 09:46:20 +08:00
    jwt
    lululau
        19
    lululau  
       2020-06-05 10:26:38 +08:00
    想了想,不需要后端 server 之间的交互, cookie 由 abc.com 种植,a.comabc.com 发送一个请求,abc.com 就能拿到自己域下的 cookie 值,然后 abc.com 对这次请求 redirect 回 a.com ,并且在 redirect location 中附上包含 cookie 值的 query parameter 就可以了
    zenzhu
        20
    zenzhu  
       2020-06-05 14:53:18 +08:00
    http://subinsb.com/set-same-cookie-on-different-domains/ 用 img set cookie google youtube 都是这么搞的
    Shikyou
        21
    Shikyou  
       2020-06-24 16:08:56 +08:00
    像 auth0 和 authing 这一类用户认证云服务,可以快速实现用户跨域登录
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2716 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 08:49 PVG 16:49 LAX 01:49 JFK 04:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86