HttpServletRequest不返回cookie - 但它们存在

时间:2013-11-15 15:04:34

标签: java servlets

我们有一个基于portlet的应用程序,它检索某个cookie进行验证,然后发送一个动作请求。

但是,我们发现HttpServletRequest返回cookie的空列表的问题 - 尽管我可以100%确认有cookie。实际上,有时代码可以工作并显示cookie(尽管这很少见)。

我们注意到IE似乎比FF和Chrome更频繁地工作,但同样,确实没有一致性或模式来确定导致它运行的原因。

始终获取请求 - 这里从来没有空指针的问题。此时唯一的问题是cookie列表为空。

返回HttpServletRequest的静态类中的方法

    FacesContext context = FacesContext.getCurrentInstance();
    Map<String, Object> requests = context.getExternalContext().getRequestMap();
    for (String requestName : requests.keySet()) {

        if (requests.get(requestName) instanceof HttpServletRequest) {
            return ((HttpServletRequest) requests.get(requestName));
        }
    }
    return null;

从其他类调用上面的静态方法:

        Cookie[] cookies = StaticClass.getHttpRequest().getCookies();
        System.out.println("Cookies = " + cookies);

2 个答案:

答案 0 :(得分:0)

HttpServletRequest方法getCookies()应该返回客户端在请求中发送的cookie数组。如果返回的数组为null,则表示客户端发送的请求不包含cookie。您是否在同一域或子域内调用addCookie(yourCookie)方法(我问您不能跨不同域访问cookie)?

即:
Cookie yourCookie = new Cookie(name, value);
response.addCookie(yourCookie);

如果cookie未添加到先前的响应中,则它不会出现在请求中。

答案 1 :(得分:0)

其他一些线索:

  1. 检查Cookie的最大年龄。 Cookie可能已过期。
  2. 检查Cookie的域名和请求网址的域名。如果您不确定,请在此处发帖寻求帮助。
  3. 一般情况下,如果您可以捕获http请求消息并在此处发布它也会有所帮助。

    更新:在Firefox中,您可以右键单击页面,然后选择“查看页面信息”,然后选择“安全”选项卡,单击“查看cookie”按钮查看所有cookie。您还可以在弹出窗口中更改域名,以查看其他域下的cookie。