我在项目上使用请求Cookie时遇到问题。我有一个cookie集合,其中包含大约3个值a,b和c。 然后,我尝试以下示例:
$cookieCollection = $this->getRequest()->getCookieCollection();
if ($cookieCollection->has('b')) {
$cookieCollection->remove('b');
}
执行此操作后,仅从该实例中删除“ b”:
$cookieCollection
。
但是它仍然存在
$this->getRequest()->getCookieCollection();
现在如何更新CookieCollection,以使“ b”在整个网站的任何地方都不再存在?
答案 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);
}
另请参见