如何从服务器端向浏览器编写多个cookie?

时间:2012-06-20 13:56:45

标签: http setcookie

我正在使用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是否正确?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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
  • 结帐源并使用允许重复键的地图 Map implementation with duplicate keys(您需要手动处理重复,例如,Location-header应该只有一次
  • 扩展DefaultHttpServerResponse并了解如何集成它
  • 合并Cookie并手动处理,例如:

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

答案 2 :(得分:0)

有一个工作环绕。

req.response()
.putHeader("Set-Cookie", "some=cookie;max-age=1000;path=/;HttpOnly"
    +"\nSet-Cookie: next=cookie"
    +"\nSet-Cookie: nnext=cookie;HttpOnly");