代码之家  ›  专栏  ›  技术社区  ›  Preciel

无法设置新的cookie

  •  0
  • Preciel  · 技术社区  · 5 年前

    我试图设置一个cookie来保存区域设置选项。
    使用 kernel.response 事件,我做到了:

    public function setCookie(FilterResponseEvent $event) {
        /** @var Response $response */
        $response=$event->getResponse();
        $cookie=new Cookie('_locale', $event->getRequest()->attributes->get('_locale'), strtotime('now + 1 year'), '/', $event->getRequest()->getHttpHost());
        $response->headers->setCookie($cookie);
    }
    

    _locale ,如果它不存在,则从 kernel.request 事件。

    问题是,在web浏览器上收到响应后,coockie没有设置。
    它甚至不在响应转储中。

    小枝转储

    ParameterBag {#13 ▼
      #parameters: array:2 [▼
        "PHPSESSID" => "5aulgi7dbut4mfjmpgvc48cr2o"
        "REMEMBERME" => "QXBwQnVuZGxlXEVudGl0eVxVc2VyOmNISmxZMmxsYkM1bllXMWxjMEJuYldGcGJDNWpiMjA9OjE1NTAzMzM1OTM6ODFiNTllMmU0MDA4YjdiOWU1Y2Q0ZjJlN2E4Y2ExZWUxOTdkOWE1YjIxNDA0NDdmZTU2MGRj ▶"
      ]
    }
    HeaderBag {#16 ▼
      #headers: array:11 [▼
        "cookie" => array:1 [▼
          0 => "PHPSESSID=5aulgi7dbut4mfjmpgvc48cr2o; REMEMBERME=QXBwQnVuZGxlXEVudGl0eVxVc2VyOmNISmxZMmxsYkM1bllXMWxjMEJuYldGcGJDNWpiMjA9OjE1NTAzMzM1OTM6ODFiNTllMmU0MDA4YjdiOWU1Y2Q0ZjJlN2E4Y2ExZWUxOTdkOWE1YjIxNDA0NDdmZTU2MGRjOGFiMTAwOWZhZA%3D%3D ◀"
        ]
      ]
    }
    

    不过,如果我加上 dump($event); exit(); 之后 $response->headers->setCookie($cookie); ,我可以看到我的饼干 event.response.headers

    kernel.response转储

    FilterResponseEvent {#995 ▼
      -response: Response {#903 ▼
        +headers: ResponseHeaderBag {#994 ▼
          #cookies: array:1 [▼
            "sphere.gdn" => array:1 [▼
              "/" => array:1 [▼
                "_locale" => Cookie {#154 ▼
                  #name: "_locale"
                  #value: "en"
                  #domain: "sphere.gdn"
                  #expire: 1581376164
                  #path: "/"
                  #secure: false
                  #httpOnly: true
                  -raw: false
                  -sameSite: null
                }
              ]
            ]
          ]
        }
    }
    

    我的听众事件由symfony发现

    Registered Listeners for "kernel.request" Event
    ===============================================
    
     ------- ------------------------------------------------------------------------------------------------- ---------- 
      Order   Callable                                                                                          Priority  
     ------- ------------------------------------------------------------------------------------------------- ---------- 
      #10     AppBundle\Service\LocaleHandlerService::setLocale()                                               0         
     ------- ------------------------------------------------------------------------------------------------- ----------
    
    Registered Listeners for "kernel.response" Event
    ================================================
    
     ------- -------------------------------------------------------------------------------------------- ---------- 
      Order   Callable                                                                                     Priority  
     ------- -------------------------------------------------------------------------------------------- ---------- 
      #1      AppBundle\Service\LocaleHandlerService::setCookie()                                          0         
     ------- -------------------------------------------------------------------------------------------- ---------- 
    

    有人能告诉我我缺了什么来做饼干吗?

    1 回复  |  直到 5 年前
        1
  •  0
  •   FAEWZX    5 年前

    试试吧。

    $cookie=new Cookie('_locale', 'en', strtotime('now + 1 year'));
    

    $cookies = $request->cookies;