无法使用Tomcat设置servlet cookie

时间:2015-02-09 20:12:15

标签: java servlets cookies tomcat8

我将以下代码作为自定义过滤器的一部分运行:

Cookie cookie = new Cookie("NAME", "VALUE");
cookie.setMaxAge(Integer.MAX_VALUE);
response.addCookie(cookie);

使用Jetty服务器运行UT时,我从servlet成功接收cookie。 然而,当我运行本地Tomcat服务器(使用IntelliJ)时,甚至没有在服务器端设置cookie(即不是客户端问题)。我能看到的唯一一个cookie是jsessionid cookie。

我试了以下但没有运气:

  1. setDomain("&#34)
  2. 的setpath(" /&#34)
  3. 添加cookie后
  4. response.flushBuffer()。
  5. 我在添加新Cookie后立即打印了所有响应Cookie,但我的Cookie未列出。

    Collection<String> headers = ((HttpServletResponse) res).getHeaders("Set-Cookie");
    for (String header : headers) {
        System.out.println("Session Cookie:" + header);
    }
    

    我对Web应用程序和Java一般都很陌生,所以我也错过了一些非常基本的东西。 将在这里感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我在这里找到答案:http://www.coderanch.com/t/577383/jforum/response-addCookie-work-filter

简而言之:“添加cookie需要修改响应的HTTP头。一旦响应被”提交“,例如写入输出流的任何内容,就无法修改HTTP头。响应已由你尝试添加cookie的时候......大多数JSP的实现和一些servlet实际上都会在缓冲区中生成响应。这意味着响应没有被提交,输出被关闭或手动刷新。所以,这在某些应用程序中会起作用而不是在其他人“。

最重要的是,我需要在调用chain.doFilter(req,res)之前更新响应。