跨域 cookie 到底应该怎么实现?我需要在 domain-1.com 通过 jquery 调用 domain-2.com 上的 PHP 写 cookie,在 domain-1.com 上读取,有可能实现么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wjpauli
V2EX    PHP

跨域 cookie 到底应该怎么实现?我需要在 domain-1.com 通过 jquery 调用 domain-2.com 上的 PHP 写 cookie,在 domain-1.com 上读取,有可能实现么?

  •  
  •  
    wjpauli 2021-02-07 11:29:39 +08:00 3872 次点击
    这是一个创建于 1708 天前的主题,其中的信息可能已经有所发展或是发生改变。

    domain-2.com/setcookie.php 上设置 cookie:

    setcookie('test', 1234, time() + 31536000, '/', 'www.domain-1.com'); 

    domain-2.com/.htaccess

    Header add Access-Control-Allow-Origin: http://www.domain-1.com Header add Access-Control-Allow-Credentials: true 

    使用 jquery 在 domain-1.com 上调用 domain-2.com/setcookie.php

    $.ajax({url: 'domain-2.com/setcookie.php', dataType : 'json', crossDomain: true, xhrFields: {withCredentials: true}}); 

    domain-1.com/test.php 上读取$_COOKIE['test']

    结果:jquery 的 ajax call 显示 setcookie was blocked 。

    看了很多文档提到只要设置好 Allow-Credentials 和 withCredentials 就可以了,指的不是这种情况么

    26 条回复    2021-02-16 17:58:53 +08:00
    sanmaozhao
        1
    sanmaozhao  
       2021-02-07 11:33:08 +08:00   1
    domain-2.com 的页面无法往 domain-1.com 写 cookie
    sub2.domain.comsub1.domain.com 才可以
    brust
        2
    brust  
       2021-02-07 14:32:25 +08:00
    用 token 不好吗
    RLWGQ0AI4MAvYy36
        3
    RLWGQ0AI4MAvYy36  
       2021-02-07 14:34:52 +08:00
    参数加密传递吧
    YouLMAO
        4
    YouLMAO  
       2021-02-07 14:39:05 +08:00   2
    大哥, 不能读 /写 跨域 cookie, 这是法则, 互联网不是法外之地

    Allow-Credentials
    指 zhifubao 服务器允许你将 zhifubao 用户的 cookie 发给服务器

    不是允许你读写 zhifubao 用户的 cookie, 这他妈偷钱都可以了
    moreant
        5
    moreant  
       2021-02-07 15:38:32 +08:00 via iPhone
    csrf 我自己?
    huanruke
        6
    huanruke  
       2021-02-07 15:41:02 +08:00
    我也一直在寻找这样的财富密码 T.T
    meepo3927
        7
    meepo3927  
       2021-02-07 15:56:58 +08:00
    没有 跨域 cookie 这一说法吧
    Ariver
        8
    Ariver  
       2021-02-07 16:04:47 +08:00 via iPhone
    如果两个域名都在你的控制之下就可以
    chinvo
        9
    chinvo  
       2021-02-07 16:08:02 +08:00 via iPhone
    domain 2 set cookie 的时候 set 到 domain 1 就可以
    vvmap
        10
    vvmap  
       2021-02-07 17:05:16 +08:00
    这是啥操作,a.foo.comb.foo.com 可以互相取到 cookie; 但是 a.comb.com 之间 cookie 是限制获取的。4 楼说的很对了,这是规则
    mostkia
        11
    mostkia  
       2021-02-07 17:23:40 +08:00
    反向代理把 domain-2.com 地址代里到 domain-1.com 的某个目录里,然后去这个目录里访问你说的 php 地址,就应该不会跨域了。
    onec
        12
    onec  
       2021-02-07 17:31:31 +08:00   1
    要是跨域能读到 cookie, 做钓鱼网站的不是想拿啥拿啥
    kmonster
        13
    kmonster  
       2021-02-07 17:50:41 +08:00
    你应该是说 session 跨域使用吧,用 redis 来做 session 共享;
    cookie 是带着 sessionId 去服务器校验 session,如果你的 session 没有做共享,A 服务器的 session 无法在 B 服务器使用
    YouLMAO
        14
    YouLMAO  
       2021-02-07 23:26:53 +08:00 via Android
    @kmonster

    两个站点分开登录如何共享呢?

    等同于,你的两个手机共享 sessionid
    Cipher0
        15
    Cipher0  
       2021-02-08 10:20:57 +08:00
    为什么不能直接用 oAuth ?
    darknoll
        16
    darknoll  
       2021-02-08 11:35:56 +08:00
    不能实现,第三方 cookie 屏蔽,你怎么折腾都没用
    wjpauli
        17
    wjpauli  
    OP
       2021-02-08 14:19:20 +08:00
    @brust 涉及到现有项目重构
    wjpauli
        18
    wjpauli  
    OP
       2021-02-08 14:24:21 +08:00
    @Ariver 烦请看下我的代码,哪里错了。
    @chinvo 烦请看下我的代码,哪里错了,我的代码就是在 domain-2 set cookie 到 domain-1,但是 chrome 显示 blocked 。但是我现在可以实现 domain-1 通过 ajax 调用 domain-2 的 php 脚本设置 cookie 到 domain-2 。

    @vvmap 他说的那是两个不同归属的网站,我说的是 domain-1.com 通过 ajax 调用 domain-2.com ,这叫 cors,完全是两回事。
    chinvo
        19
    chinvo  
       2021-02-08 15:17:16 +08:00 via iPhone
    @wjpauli #16 时间过去有点久忘了当年怎么弄的了。现在的浏览器会拦截这种给其他域名 set cookie 。

    你试试 p3p,不知道现在还能用么。
    wjpauli
        20
    wjpauli  
    OP
       2021-02-08 16:26:14 +08:00
    @chinvo p3p 是在 domain-1 里使用 iframe 调用 domain-2,设置 domain-2 下面的 cookie,现在这些 adsense 类的广告都是这么插的。思来想去我决定放弃 session+cookie 改用 token 。
    chinvo
        21
    chinvo  
       2021-02-08 18:04:01 +08:00 via iPhone
    @wjpauli #18 时间过去太久只有模糊印象。总之,这些都属于歪门邪道,容易引发安全问题。
    justfun
        22
    justfun  
       2021-02-10 00:56:35 +08:00
    justfun
        23
    justfun  
       2021-02-10 00:57:41 +08:00
    inhal
        24
    inhal  
       2021-02-10 11:11:02 +08:00 via Android
    @wjpauli #20 请问现在你的解决方案是什么?可以分享一下吗?
    laozhoubuluo
        25
    laozhoubuluo  
       2021-02-11 17:41:52 +08:00
    两个不同的域名,肯定是不能直接读取 Cookie 的。
    只能是在 domain-1.com 的前端上让 jQuery 去请求一个 domain-2.com 的接口,让他把 domain-2.com 上的 test Cookie 发过来,完了 domain-1.com 前端再根据返回值决定业务状态。
    拿到返回值之后,不管是写到 domain-1.com 的 cookie,还是直接拼接到请求里面提交给后端都可以。
    markgor
        26
    markgor  
       2021-02-16 17:58:53 +08:00
    withCredentials 印象中只能传不能写吧?
    你需求是访问 A,通过 AJAX 请求 B,把 B 的结果写入 A 的 cookie 里面?
    如果是这样,可以尝试:

    方案 1:
    A 发送请求 B,B 不需要通过 cookie,直接返回 response text,然后再发 ajax 请求去 A 设定 cookie 。
    (涉密可以通过 openssl 加密返回内容,在 a 的请求位置上解密即可。

    方案 2:
    页面通过 AJAX 请求 A,A 通过 curl 请求 B,再把 COOKIE 传递回去。(即 B 的 ajax 访问改为 A 通过 CURL 访问)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2728 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 07:47 PVG 15:47 LAX 00:47 JFK 03:47
    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