Netty-不能用一个cookieencoder设置多个cookie
题
我在服务器HTTP处理程序上有以下简单的测试代码:
String cookieString = request.getHeader(COOKIE);
if (cookieString != null) {
CookieDecoder cookieDecoder = new CookieDecoder();
Set<Cookie> cookies = cookieDecoder.decode(cookieString);
if (!cookies.isEmpty()) {
CookieEncoder cookieEncoder = new CookieEncoder(true);
for (Cookie cookie : cookies) {
System.out.println("---> " + cookie);
cookieEncoder.addCookie(cookie);
}
response.addHeader(SET_COOKIE, cookieEncoder.encode());
}
} else {
// set cookie for initial time (just testing)
if (true) {
CookieEncoder cookieEncoder = new CookieEncoder(true);
cookieEncoder.addCookie("key", "value");
cookieEncoder.addCookie("key2", "value2");
response.addHeader(SET_COOKIE, cookieEncoder.encode());
} else {
CookieEncoder cookieEncoder1 = new CookieEncoder(true);
CookieEncoder cookieEncoder2 = new CookieEncoder(true);
cookieEncoder1.addCookie("key", "value");
cookieEncoder2.addCookie("key2", "value2");
response.addHeader(SET_COOKIE, cookieEncoder1.encode());
response.addHeader(SET_COOKIE, cookieEncoder2.encode());
}
}
如您所见,我尝试设置两个虚拟饼干的初始时间。当我在FF中刷新页面(因此由客户端传递)(在IE和Chrome中确实发生)时,请求的标题中只有一个cookie并打印出来。
但是,如果我用单独的cookieencoder设置两个cookie(请参见上面代码段中的false-c-sause),则一切都按预期工作。
这是预期的行为吗?我希望您可以用一个cookieencoder设置多个cookie?
解决方案 3
我正在回答自己的问题,因为这似乎是一个问题。看 https://github.com/netty/netty/issues/94.
其他提示
// Initialize Variables
ArrayList<String> cookieArray = new ArrayList<String>();
// Encode 'cooke1' to 'response' Header
encoder.addCookie(cookie1);
// Append 'cookie1' to 'cookieArray'
cookieArray.add(encoder.encode());
// Encode 'cooke2' to 'response' Header
encoder.addCookie(cookie2);
// Append 'cookie2' to 'cookieArray'
cookieArray.add(encoder.encode());
// Create Cookies using 'cookieArray'
response.setHeader("Set-Cookie", cookieArray);
实际上,这违反了HTTP cookie规范,以将多个cookie设置在 Set-Cookie
标题。您只需要编码一个cookie Set-Cookie
标题。
Netty的CookieEncoder允许这样做,并且产生了不合格的 Set-Cookie
标题。
要解决此问题,下一个版本的Netty将投掷 IllegalStateException
如果用户尝试在服务器模式下编码多个cookie。
不隶属于 StackOverflow