2010-04-14 36 views
2

当我在我的java servlet中检索cookie时,getPath()中的所有值都为null。在Java中检索正确的cookie的问题

因此,如果在目录/ foo中和根目录中设置了具有相同名称的cookie,我将检索两个具有相同确切名称的cookie,但我无法区分它们,因为getPath()对于。

我看着萤火虫,看到firefox没有发送任何东西的路径。

我的应用程序使用“rememberme”cookie,路径设置为“/”。只要有一个名为rememberme的cookie,一切都可以正常工作。但是,如果另一个cookie在不同的路径(如/ foo)上被设置为相同的名称,那么我的应用程序将不知道哪一个是我为根设置的。

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

回答

2

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

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

0

我不知道有多少,这将帮助你,但我最近写了这个方法从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; 
} 

这种方法在短短的使用简单的应用程序虽然:)希望它有一些好处!

+0

writeToCookiesFile(cookie);是我写的将Cookie保存到.txt文件的另一种方法。如果你想要它,你也可以拥有该代码:) – Samwhoo 2010-04-14 15:30:33

0

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