如果不存在,只将cookie添加到响应中

时间:2012-08-29 08:40:58

标签: java cookies response session-cookies

我需要检查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?

2 个答案:

答案 0 :(得分:0)

家是正确的。

我在HttpServletResponseWrapper周围创建了一个包装器,并将Cookie存储在addCookie方法中。

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

感谢您的帮助。

答案 1 :(得分:0)

如果“Set-Cookie”标题已经包含此类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);
    }
}