响应中的addCookie和头中的 "Set-Cookie "之间的混淆。

问题描述 投票:2回答:1

我看到有些人在响应对象中使用addCookie来设置cookie,如下所示。

Cookie cookie = new Cookie("name", value);
cookie.setHttpOnly(true);
cookie.setSecure(true);
cookie.setPath("/");
response.addCookie(cookie);

而有些人则是用 "Set-Cookie "在头部添加cookie,如下图所示

response.addHeader("Set-Cookie","name=" + value + ";Path=/; Secure; HttpOnly");

但我对这两种方法有点困惑,这两种方法有什么区别呢? 我们应该优先使用哪种方法。

servlets cookies http-headers
1个回答
0
投票

就目前而言,由于Servlet api 4.0与SameSite属性不兼容,我会选择setHeaderaddHeader的解决方案。

更多的是,所有的请求cookie(如果没有设置sameSite=StrictLaxNone; Secure)应该通过addHeader('Set-Cookie',...)添加到响应中(以避免很快被几乎所有的浏览器拒绝),就像下面这样。

    boolean firstHeader = true;
    String sameSite = RequestUtil.isSecure(request) ? "; SameSite=None; Secure" : "; SameSite=Lax";
    for (String header : headers) { // there can be multiple Set-Cookie attributes
        if (firstHeader) {
            response.setHeader("Set-Cookie", String.format("%s; %s", header, sameSite));
            firstHeader = false;
            continue;
        }
        response.addHeader("Set-Cookie", String.format("%s; %s", header, sameSite));
    }

如果response.getHeaders("Set-Cookie")没有列出所有预期的Cookie,也可以尝试检查request.getCookies,并使用它们在响应中添加Set-Cookie Header。

注意:根据我的理解,response.addCookie与response.addHeader("Set-Cookie")的行为并不相似,事实上,使用addCookie,我无法在response头中看到相应的Set-Cookie......

© www.soinside.com 2019 - 2024. All rights reserved.