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

2021-02-07 11:29:39 +08:00
 wjpauli

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 就可以了,指的不是这种情况么

3015 次点击
所在节点    PHP
26 条回复
chinvo
2021-02-08 18:04:01 +08:00
@wjpauli #18 时间过去太久只有模糊印象。总之,这些都属于歪门邪道,容易引发安全问题。
justfun
2021-02-10 00:56:35 +08:00
justfun
2021-02-10 00:57:41 +08:00
inhal
2021-02-10 11:11:02 +08:00
@wjpauli #20 请问现在你的解决方案是什么?可以分享一下吗?
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
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 访问)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/752006

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX