前端是 nodejs 项目,后端是 symfony 项目,前后端域名分别是:a.example.com 和 b.example.com 。 后端有个创建 token 的网址: https://b.example.com/token.html,设置一个共享的 cookie: token。
public function token()
{
    $tokenTokenManager = $this->container->get('security.csrf.token_manager');
    $token = $csrfTokenManager->refreshToken($this->tokenName);
    $tokenCookie = new Cookie(
        'token',
        $token,
        time() + 3600,
        '/',
        $this->cookieDomain,
        true,
        false
    );
    $response = new Response();
    $response->headers->setCookie($tokenCookie);
    return $response;
}
如果单独执行 https://b.example.com/token.html,前端可以获取到 cookie。但是如果通过前端请求这个网址,cookie 就为空,这个是怎么回事呢?
|  |      1leeyuzhe      2019-06-19 10:15:01 +08:00 via Android 第一,需要 node 端先获取 cookie 再设置给前端 第二,会话应该由 node 端管理而不是后端管理,node 端跟后端应采用类似 token 的鉴权方式,而不是 cookie 跟 session | 
|  |      2ch3nOr      2019-06-19 10:27:13 +08:00 | 
|  |      3luzemin      2019-06-19 10:28:24 +08:00 设置 cookie 的 domain 为“.example.com ” | 
|  |      4ch3nOr      2019-06-19 10:29:38 +08:00 另外需要注意 Cookie  的作用域,在你的例子里,如果需要 a.example.com 和 b.example.com 都能用到同一个 Cookie,你需要把 Cookie 的 domain 设置为 .example.com https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies#Cookie%E7%9A%84%E4%BD%9C%E7%94%A8%E5%9F%9F | 
|  |      6zuoakang      2019-06-19 11:41:23 +08:00 via Android 二级域名 cookie 共享,要设置 domain 为相同的二级域名,如三楼回复的。 | 
|      7MrMike OP | 
|  |      8ch3nOr      2019-06-19 14:48:37 +08:00 #7 @MrMike   1. 前端请求的 API 的时候,设置 withCredentials 2. 响应的 Header 里面带上 Access-Control-Allow-Credentials: true 做这两件事后再试一试? | 
|  |      9Tomorr      2019-06-19 16:56:09 +08:00 同一域名,二级站点共享 Cookie,设置作用域为顶级域名 不同域名,方法也多,常用的是独立的一台服务(如 Redis 等) | 
|  |      13welling      2019-06-19 23:12:19 +08:00 node 难道不是后端吗? |