0

我正在使用vert.x编写应用程序。它还没有内置 cookie 支持,我们必须使用“putHeader()”方法手动设置 cookie。

现在我想设置几个cookie,所以我写:

 req.response.putHeader("Set-Cookie", "aaa=111; path=/")
 req.response.putHeader("Set-Cookie", "bbb=222; path=/")
 req.response.putHeader("Set-Cookie", "ccc=333; path=/")

但我发现 vert.x 只发送一个“Set-Cookie”:

 Set-Cookie ccc=333; path=/

我不确定我是否误会了什么。服务器可以一次发送多个“Set-Cookie”命令吗?以这种方式发送多个 cookie 是否正确?

4

3 回答 3

2

使用netty的io.netty.handler.codec.http.ServerCookieEncoder功能:

req.response.putHeader("Set-Cookie", 
        ServerCookieEncoder.encode(new DefaultCookie("aaa", "111")))

有许多有用的方法签名:

ServerCookieEncoder.encode(Cookie cookie)
ServerCookieEncoder.encode(Cookie... cookies)
ServerCookieEncoder.encode(Collection<Cookie> cookies)
ServerCookieEncoder.encode(Iterable<Cookie> cookies)
于 2014-11-07T14:45:18.197 回答
1

我认为不,开箱即用是不可能的,因为标头存储在 HashMap 中: https ://github.com/purplefox/vert.x/blob/master/src/main/java/org/vertx/java/core/http /impl/DefaultHttpServerResponse.java#L81

你可以:

  • 打开新问题
  • 评论现有问题https://github.com/purplefox/vert.x/issues/89
  • 签出源并使用允许重复键 的映射 使用重复键的映射实现(您需要手动处理重复项,例如 Location-header 应该只有一次
  • 扩展 DefaultHttpServerResponse 并查看如何集成它
  • 合并 cookie 并手动处理,例如:

    req.response.putHeader("Set-Cookie", "aaa=111&bbb=222&ccc=333; path=/")

于 2012-06-23T19:51:29.263 回答
0

有一个工作区。

req.response()
.putHeader("Set-Cookie", "some=cookie;max-age=1000;path=/;HttpOnly"
    +"\nSet-Cookie: next=cookie"
    +"\nSet-Cookie: nnext=cookie;HttpOnly");
于 2014-12-02T08:22:23.287 回答