【问题标题】:HttpServletRequest returning no cookies - but they existHttpServletRequest 不返回任何 cookie - 但它们存在
【发布时间】:2013-11-15 15:04:33
【问题描述】:

我们有一个基于 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);

【问题讨论】:

  • 暂时忘掉java代码,开始检查HTTP流量。为什么最终用户浏览器不发送 cookie?你是如何设置它们的?
  • 当你有这个时,也可以在问题中添加相关信息。

标签: java servlets


【解决方案1】:

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

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

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

【讨论】:

  • 这个特定的 cookie 是通过我们使用的第 3 方 Javascript 调用添加的。 cookie 在那里 - 但它没有添加到请求中吗?
  • @user2124871,请检查 cookie 路径,请求 uri 应该匹配它。尝试将 cookie 路径设置为“/”以进行测试。
  • @user2124871,听起来您是在使用 3rd 方 JavaScript 直接在浏览器中设置 cookie。如果是这种情况,那么正如 Osw 所说,检查 cookie 路径和域。还要检查以确保 cookie 确实在浏览器中。在请求中将 cookie 发送到服务器的唯一方法是,如果用户将浏览器指向与 cookie 中设置的完全相同的路径和域。一旦 cookie 重新发送到服务器,就可以通过 getCookies() 方法访问它。
【解决方案2】:

其他一些线索:

  1. 检查您的 Cookie 的最大年龄。 Cookie 可能已过期。
  2. 检查 cookie 的域和请求 URL 的域。如果您不确定,请在此处发布以寻求帮助。

一般来说,如果您可以捕获 http 请求消息并将其发布在此处也会有所帮助。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-14
    • 2015-08-22
    • 2013-01-04
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多