【问题标题】:Symfony 4 remove cookiesSymfony 4 删除 cookie
【发布时间】:2020-01-24 07:45:47
【问题描述】:

我有一个 cookie 设置代码。

public function checkInviter(int $inviter)
{        
   $response = new RedirectResponse($this->generateUrl('app_homepage'));
   if ($inviter > 0) {
        $response->headers->setCookie(Cookie::create('_inviter_id', $inviter, new \DateTime("+ 30  days")));
        $response->sendHeaders();
    }

    return $response;

}

在注册的进一步我想删除/清除它。如果我创建一个新响应,那么他不知道 cookie 集。 如何使用 cookie?

public function register() {
    $response = new Response();
    dump($response); // cleared Response
    $response->headers->removeCookie('_inviter_id', '/', null);
    $response->send();

    return $this->render('security/register.html.twig');
}

我找到了一些answer,但并不完全准确。

【问题讨论】:

  • “如何使用 cookie”是什么意思? - 给定的代码到底是什么不工作?
  • 我写的是你删除的时候响应为空,cookie不删除。
  • 您是否尝试过使用其他答案?毕竟我不认为给定的代码使用了你手工制作的$response,因为$this->render对此一无所知
  • $response->send();之前谈过
  • 你确定吗? $response 是一个新的响应实例,如果你想使用它,你应该将它分配给$this->render 的函数调用

标签: symfony


【解决方案1】:

您正在复制响应的生成:从技术上讲,发送了两种不同的响应,因为您在控制器中生成一个,而 Symfony 在 $this->render 期间创建第二个。

您应该通过将其设置为render 的第三个参数来重用您自己的 Response 对象以避免出现问题。完整的代码可能如下所示(重用您已经找到的方法clearCookie):

public function register() {
    $response = new Response();
    $response->headers->clearCookie('_inviter_id', '/', null);

    return $this->render('security/register.html.twig', [], $response);
}

【讨论】:

  • 谢谢。我会标记你的答案。但即使没有render(...$response),我的选项也有效
  • 是的,确实如此,因为发送了正确的标头。但它可能有副作用,你应该避免
【解决方案2】:

测试代码,我找到了解决方案。使用

$response->headers->clearCookie('_inviter_id');

这会清除值并设置新的到期日期。

【讨论】:

    猜你喜欢
    • 2012-10-20
    • 2013-04-22
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多