请教个 cookies 共享的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MrMike
V2EX    PHP

请教个 cookies 共享的问题

  •  1
     
  •   MrMike 2019-06-19 09:40:56 +08:00 4338 次点击
    这是一个创建于 2356 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端是 nodejs 项目,后端是 symfony 项目,前后端域名分别是:a.example.comb.example.com 。 后端有个创建 token 的网址: ttps://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 就为空,这个是怎么回事呢?

    15 条回复    2019-06-20 00:21:30 +08:00
    leeyuzhe
        1
    leeyuzhe  
       2019-06-19 10:15:01 +08:00 via Android
    第一,需要 node 端先获取 cookie 再设置给前端
    第二,会话应该由 node 端管理而不是后端管理,node 端跟后端应采用类似 token 的鉴权方式,而不是 cookie 跟 session
    luzemin
        3
    luzemin  
       2019-06-19 10:28:24 +08:00
    设置 cookie 的 domain 为“.example.com ”
    ch3nOr
        4
    ch3nOr  
       2019-06-19 10:29:38 +08:00
    另外需要注意 Cookie 的作用域,在你的例子里,如果需要 a.example.comb.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
    ritaswc
        5
    ritaswc  
       2019-06-19 11:39:42 +08:00
    @luzemin 三楼正解
    zuoakang
        6
    zuoakang  
       2019-06-19 11:41:23 +08:00 via Android
    二级域名 cookie 共享,要设置 domain 为相同的二级域名,如三楼回复的。
    MrMike
        7
    MrMike  
    OP
       2019-06-19 13:12:47 +08:00
    @ritaswc
    @zuoakang
    @luzemin

    设置了的,要是前端请求后端的话,后端创建 cookie 的功能无效。但是如果直接访问后端的链接,cookie 创建成功,前端也可以获取到。
    ch3nOr
        8
    ch3nOr  
       2019-06-19 14:48:37 +08:00
    #7 @MrMike


    1. 前端请求的 API 的时候,设置 withCredentials
    2. 响应的 Header 里面带上 Access-Control-Allow-Credentials: true

    做这两件事后再试一试?
    Tomorr
        9
    Tomorr  
       2019-06-19 16:56:09 +08:00
    同一域名,二级站点共享 Cookie,设置作用域为顶级域名
    不同域名,方法也多,常用的是独立的一台服务(如 Redis 等)
    MrMike
        10
    MrMike  
    OP
       2019-06-19 18:32:57 +08:00
    @Tomorr 在同一台服务器上,前端是 nodejs,后端是 apache
    MrMike
        11
    MrMike  
    OP
       2019-06-19 18:33:36 +08:00
    @ch3nOr 我试试。
    ritaswc
        12
    ritaswc  
       2019-06-19 19:10:24 +08:00
    @MrMike #7 有个什么请求头的,要设置一下 看一下 8 楼的
    welling
        13
    welling  
       2019-06-19 23:12:19 +08:00
    node 难道不是后端吗?
    MrMike
        14
    MrMike  
    OP
       2019-06-20 00:20:20 +08:00
    @ch3nOr 可以了。谢了。。。
    MrMike
        15
    MrMike  
    OP
       2019-06-20 00:21:30 +08:00
    @welling 可以是,我这里说的前端是指界面方面的前端,表述没到位,不好意思。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     854 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 19:22 PVG 03:22 LAX 11:22 JFK 14:22
    Do have faith in what you're doing.
    ubao msn 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