【发布时间】:2016-02-15 13:30:26
【问题描述】:
我有两个子域“api.domain.com”和“web.domain.com”。 现在“web.domain.com”是用html/javascript编写的网页,“api.domain.com”是一个用php编写的简单的restful API服务器。
“api.domain.com”在头部设置某些cookies如下
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true");
setcookie("TestCookie", "Some Value", time()+3600, "/", ".domain.com", 0);
现在,当我从“web.domain.com”到“api.domain.com”进行 ajax 调用(使用 jQuery.ajax())时,response 标头包含
Set-Cookie:abc=802691344656c1d0899c4a74.87956617; expires=Mon, 16-May-2016 21:00:09 GMT; path=/; domain=domain.com,
所以我猜应该在“web.domain.com”的客户端浏览器中设置一个cookie。
下次我从“web.domain.com”向“api.domain.com”发出另一个请求时,这个 cookie 不应该作为 request 标头的一部分吗?
但是,当我在“api.domain.com”检查 $_COOKIE 数组时,我没有看到这个 cookie!这是否意味着 cookie 一开始就没有在客户端(“web.domain.com”)中设置?我做错了什么?
【问题讨论】:
-
首先,您应该在浏览器工具中检查哪些 cookie 设置在哪里。
-
cookie 不会跨域发送,除非您使用 withCredentials 标头
-
另外,
.domain.com不是有效的域名。 -
@charlietfl :我应该在哪里设置 withCredentials 标头?在请求或响应中?在我已经设置的响应中: header("Access-Control-Allow-Credentials: true");
-
@Cristy ,“。”是一个错字。我正在设置“domain.com”
标签: javascript php jquery ajax cookies