1

我需要检查是否已将 cookie 添加到响应中。

我有一个奇怪的问题,我的回复收到了Set-Cookie两次标头。

Set-Cookie:foo=bar; Domain=dev.mysite.com; Expires=Fri, 05-May-2062 04:05:43 GMT; Path=/

Set-Cookie:foo=bar; Domain=dev.mysite.com; Expires=Fri, 05-May-2062 04:05:43 GMT; Path=/

2个标题完全相同。当我调试堆栈时调用此代码两次。这段代码的加倍是由于我正在使用的 Web 堆栈,我无法更改。

我不关心请求中发送了哪些 cookie,但我不希望此标头发送两次。

似乎没有一种简单的方法可以找到通过该addHeader方法添加的 cookie。

在调试期间,奇怪的是,如果我在调用后检查响应对象中的标头,response.addCookie(myCookie);我看不到Set-Cookie标头。

如果响应中尚未发送同名 cookie,有没有办法只能将 cookie 添加到响应中?

4

2 回答 2

0

家是正确的。

我已经创建了一个包装器HttpServletResponseWrapper并将 cookie 存储在addCookie方法中。

然后我在添加另一个之前检查列表中是否存在 cookie。

谢谢你的帮助。

于 2012-08-29T10:17:38.080 回答
0

如果已经包含此类 cookie,您可以检查“Set-Cookie”标头。

public static void addCookieIfNotExists(Cookie cookie, HttpServletResponse response) {
    boolean exists = response.getHeaders("Set-Cookie").stream()
            .noneMatch(cookieValue -> cookieValue.startsWith(cookie.getName() + "="));

    if (!exists) {
        response.addCookie(cookie);
    }
}

于 2020-12-22T13:01:56.317 回答