【问题标题】:How to write multi cookies from server side to browser?如何将多个cookie从服务器端写入浏览器?
【发布时间】:2012-06-20 13:56:44
【问题描述】:

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

【问题讨论】:

    标签: http setcookie


    【解决方案1】:

    使用 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)
    

    【讨论】:

      【解决方案2】:

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

      你可以:

      【讨论】:

        【解决方案3】:

        只有一种解决方法。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-21
          • 1970-01-01
          • 1970-01-01
          • 2016-09-13
          • 2011-02-04
          • 2020-05-23
          • 1970-01-01
          • 2018-06-23
          相关资源
          最近更新 更多