0

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

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

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

$cookieCollection.

但它仍然存在于

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

现在如何更新 CookieCollection 以使整个站点中的任何位置都不再存在“b”?

4

1 回答 1

0

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

// ...
$cookieCollection = $cookieCollection->remove('b');
$this->request = $this->request->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);
}

也可以看看

于 2019-01-10T11:42:07.847 回答