2013-11-15 54 views
2

我们有一个基于portlet的应用程序,它检索某个cookie进行验证,然后发送一个操作请求。HttpServletRequest不返回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); 
+0

忘记了一段时间的Java代码,并开始检查HTTP流量。为什么最终用户浏览器不发送cookie?你如何设置它们? – eis

+0

当你有这个问题时,也可以在问题中添加相关信息。 – eis

回答

0

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

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

如果没有添加到以前的响应中的Cookie,也不会在该请求。

+0

这个特殊的cookie是通过我们使用的第三方Javascript调用添加的。该cookie在那里 - 但不是在请求中添加的? – user2124871

+0

@ user2124871,请检查cookie路径,请求uri应该匹配它。尝试将coookie路径设置为“/”以用于测试目的。 – Osw

+0

@ user2124871,这听起来像你使用第三方JavaScript来直接在浏览器中设置cookie。如果是这种情况,那么就像Osw说的那样,检查cookie路径和域名。同时检查以确定cookie实际上在浏览器中。 cookie将被发送到服务器的请求的唯一方式是,如果浏览器被用户指向与cookie中设置的完全相同的路径和域。一旦cookie重新发送到服务器,它就可以通过getCookies()方法访问。 –

0

其他一些线索:

  1. 检查Cookie的最大年龄。 Cookie可能已过期。
  2. 检查cookie的域名和请求URL的域名。如果你不确定,请在这里发帖寻求帮助。

一般情况下,如果您可以捕获http请求消息并将其发布到此处,它也将有所帮助。

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

相关问题