请教前端大佬一个跨域保存 cookie 问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
engongong
V2EX    程序员

请教前端大佬一个跨域保存 cookie 问题

  •  
  •   engongong 66 天前 2530 次点击
    这是一个创建于 66 天前的主题,其中的信息可能已经有所发展或是发生改变。

    a 网站页面 iframe 嵌入 b 网站页面, b 网站项目需要保存请求 b 网站项目自己的 cookie , a b 是不同主域名, 在 iframe 中如何才能保存 b 的 cookie

    22 条回复    2025-08-08 16:32:52 +08:00
    lcy630409
        1
    lcy630409  
       66 天前
    我记得 浏览器会自己保存域名下的 cookie 啊?难道不是么 怀疑自己...
    engongong
        2
    engongong  
    OP
       66 天前
    @lcy630409 #1
    a b 是不同主域名,保存不了
    kuoruan
        3
    kuoruan  
       66 天前   3
    SameSite=None; Secure; HttpOnly
    shintendo
        4
    shintendo  
       66 天前
    “b 网站项目需要保存请求 b 网站项目自己的 cookie”

    没看懂这跟 a 有啥关系
    SanjinGG
        5
    SanjinGG  
       66 天前
    看几遍也没看到是什么问题,a 是 iframe 还是 b 是 iframe ?目前看 a,b 并不需要对方的 cookie ,各自保存到 cookie 就是了
    alvinbone88
        6
    alvinbone88  
       66 天前
    engongong
        7
    engongong  
    OP
       66 天前
    @SanjinGG #5
    a 里嵌入了个 iframe ,打开是 b 网站。a b 是不同主域名,保存不了 b
    rabbbit
        8
    rabbbit  
       66 天前
    3 楼那个解决办法有用吗?
    gausszhou
        9
    gausszhou  
       66 天前 via Android
    3 楼已经解答了
    n18255447846
        10
    n18255447846  
       66 天前   1
    你的问题得分两部分
    1. 浏览器默认就会保存不同域名下的数据,包括 cookie 等,这不需要额外的操作,在 devtools 里能看到
    2. 你的问题因该是 iframe 里 b 域名的网站请求未携带 cookie 的问题
    feixiangcode
        11
    feixiangcode  
       66 天前
    如果是两个完全不一样的一级域名,我理解保存不了。
    xinkuie
        12
    xinkuie  
       66 天前
    三方 cookie 问题,可以试下 SameSite=None; Secure ,但不能完全解决,还取决于浏览器种类/版本/设置
    agcl02
        13
    agcl02  
       66 天前
    1.在主页面 A 中使用 postMessage 向 iframe 发送数据
    2.在 iframe 页面 B 中监听消息,并设置 cookie
    journalistFromHK
        14
    journalistFromHK  
       66 天前 via iPhone
    iframe 一般是别人的 怎么设置啊…
    sampeng
        15
    sampeng  
       66 天前 via iPhone
    别人的?你要是可以那不叫跨域,那叫偷 cookie
    AV1
        16
    AV1  
       66 天前
    想保存哪个域名的 cookie ,就由那个域名的网站来保存。
    比如 b 网站的响应报头,或者 b 网站的 JS 上下文。
    如果 b 不是你家的,那你得叫 b 的程序员给你改,外面的 a 是什么也干不了的。
    qiuxuqin
        17
    qiuxuqin  
       65 天前
    这个问题我也遇到过,3 楼说的 SameSite=None; Secure; HttpsOnly (原楼主的 https 打欠了个 s )是可以解决,但是这要求页面是 https 协议的,而我开发的页面(也就是楼主说的被嵌入的页面 b )是 http 的,这样的页面没法解决 cookie 不能跨域的问题。
    我的解决方案是,b 页面不用 cookie ,直接把 token 保存在 URL 中,每次请求接口时都把 URL 携带的 token 传给接口(通过 HTTP 请求头)。
    qiuxuqin
        18
    qiuxuqin  
       65 天前
    这个问题我也遇到过,3 楼说的 SameSite=None; Secure; HttpsOnly (原层主的 https 打欠了个 s )是可以解决,但是这要求页面是 https 协议的,而我开发的页面(也就是楼主说的被嵌入的页面 b )是 http 的,这样的页面没法解决 cookie 不能跨域的问题。
    我的解决方案是,b 页面不用 cookie ,直接把 token 保存在 URL 中,每次请求接口时都把 URL 携带的 token 传给接口(通过 HTTP 请求头)。
    ymcz852
        19
    ymcz852  
       65 天前
    我测试了下,
    - same site:main page 和 iframe page 主域名相同,子域名不同
    - cross site:main page 和 iframe page 主域名不同


    ### 测试结果总结

    | **测试类型** | **Chrome** | **Firefox** | **Safari** |
    | --- | --- | --- | --- |
    | Same Site 测试 | 正常/无痕模式均携带 Cookie | 正常/无痕模式均携带 Cookie | 正常/无痕模式均携带 Cookie |
    | Cross Site (SameSite: Lax) | 正常: 无痕: | 正常: 无痕: | 正常: 无痕: |
    | Cross Site (SameSite: None) | 正常: 无痕: | 正常: 无痕: | 正常: 无痕: |

    通过测试可以看出:

    - 同站(Same Site)情况下:所有浏览器在正常和无痕模式下均正常处理 Cookie
    - 跨站(Cross Site)情况下:
    - Chrome: 只在正常模式下接受 SameSite=None 的 Cookie
    - Firefox: 最为宽松,全部接受
    - Safari: 最为严格,全部拒绝
    skallz
        20
    skallz  
       64 天前
    这个类似场景之前设计过方案,a 、b 网页是不同的主域名,要求 a 登录过后,打开 b 网页也要保持登录状态,也就是共享 token ,方案是 a 登录过后尝试与同 ip 下同指纹的页面通过 webrtc 建立连接,当 b 网页打开后,由于浏览器指纹相同,此时 a 与 b 建立连接,a 将 token 传给 b ,b 接收之后完成自动登录,同时打开 a 与 b 域名的网页并且同 ip 同浏览器指纹的用户几乎不会撞见相同的(该应用是 b 端,用的人不会很多)
    skallz
        21
    skallz  
       64 天前
    @skallz 这个场景比 op 的还要严格,因为是不同窗口,iframe 的话直接 postmessage 或者用 url 传参就可以了
    engongong
        22
    engongong  
    OP
       64 天前
    谢谢各位回复!
    token 是 b 网页项目生成的,不太可能 postmessage 或者用 url 传参
    后面按 3 楼试试
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2474 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 01:38 PVG 09:38 LAX 18:38 JFK 21:38
    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