从CakePHP集合中删除/删除cookie对象后,如何更新请求CookieCollection?

时间:2019-01-10 10:38:02

标签: php cakephp cookies server httpcookiecollection

我在项目上使用请求Cookie时遇到问题。我有一个cookie集合,其中包含大约3个值a,b和c。 然后,我尝试以下示例:

$cookieCollection = $this->getRequest()->getCookieCollection();
if ($cookieCollection->has('b')) {
    $cookieCollection->remove('b');
}

执行此操作后,仅从该实例中删除“ b”:

$cookieCollection

但是它仍然存在

$this->getRequest()->getCookieCollection();

现在如何更新CookieCollection,以使“ b”在整个网站的任何地方都不再存在?

1 个答案:

答案 0 :(得分:0)

请求对象是不可变的,cookie集合(以及对此的响应)也是不可变的。您必须使用新的cookie集合分配一个新的请求对象,例如:

// ...
$cookieCollection = $cookieCollection->remove('b');
$this->setRequest($this->getRequest()->withCookieCollection($cookieCollection));

如果您需要在任何地方都可以使用它,那么我建议考虑删除中间件级别的cookie:

function (\Psr\Http\Message\ServerRequestInterface $request, $response, $next) {
    $cookies = $request->getCookieParams();
    if (isset($cookies['b'])) {
        unset($cookies['b']);
        $request = $request->withCookieParams($cookies);
    }

    return $next($request, $response);
}

另请参见