【问题标题】:Problems with retrieving the correct cookie in Java在 Java 中检索正确 cookie 的问题
【发布时间】:2010-04-14 02:18:40
【问题描述】:

当我在我的 java servlet 中检索 cookie 时,getPath() 中的所有值都是空的。

因此,如果在目录 /foo 和根目录中设置了一个具有相同名称的 cookie,我会检索两个具有完全相同名称的 cookie,但我无法区分它们,因为 getPath() 对两者都返回 null。

我查看了 firebug,发现 firefox 没有为路径发送任何内容。

我的应用程序使用路径设置为“/”的“rememberme”cookie。只要只有一个名为 rememberme 的 cookie,一切正常。但是,如果以某种方式在 /foo 等不同路径上设置了另一个具有相同名称的 cookie,那么我的应用程序将不知道我为根设置的那个是哪个。

如何区分 cookie?我是否需要担心子目录中存在同名的 cookie,或者我可以假设只有我设置的那个?

【问题讨论】:

    标签: java cookies web-applications


    【解决方案1】:

    如果浏览器不发送路径,则应在 Cookie 处理程序中将路径设置为“/”。

    您的服务器设置 cookie,而不是 Web 浏览器,因此如果您将创建的 cookie 的所有路径设置为同一域的“/”,则不必担心。

    【讨论】:

      【解决方案2】:

      我不确定这对你有多大帮助,但我最近编写了这个方法来从 URLConnection 对象中检索 cookie 并将它们作为字符串返回:

      public String getCookies(URLConnection connection) {
          String headerName = null;
          String cookie = "";
          for (int i=1; (headerName = connection.getHeaderFieldKey(i))!=null; i++) {
              if (headerName.equals("Set-Cookie")) {
                  if (cookie.equals("")) {
                      cookie = connection.getHeaderField(i);
                  }
                  else {
                      cookie = cookie + "; " + connection.getHeaderField(i);
                  }
              }
          }
          writeToCookiesFile(cookie);
          return cookie;
      }
      

      虽然这个方法只是在一个普通的应用程序中使用 :) 希望它有一些好处!

      【讨论】:

      • writeToCookiesFile(cookie);是我编写的另一种将 cookie 保存到 .txt 文件的方法。如果需要,您也可以拥有该代码:)
      【解决方案3】:

      只有当 url 的路径以 /foo 开头时,浏览器才会发送为路径 /foo 定义的 cookie。如果在 / 和 /foo 上都设置了同名的 cookie,则无法区分它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-06
        • 1970-01-01
        相关资源
        最近更新 更多