【发布时间】:2015-03-07 04:11:03
【问题描述】:
我正在使用 java.net.CookieManager 和 java.net.CookieHandler 来跟踪 cookie。我需要删除一个,但保留所有其他。问题是使用 cookieManger.getCookieStore().getCookies() 返回的 List 是不可修改的,因此当我尝试删除 cookie 时会引发异常。
以下是关于 cookie 的代码:
public HttpProxy(String host, String port) {
cookieManager = new CookieManager(null, CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cookieManager);
//other irrelevant code
}
private CookieManager cookieManager;
public void deleteGameCookie() {
CookieStore cookieStore = cookieManager.getCookieStore();
List<HttpCookie> cookieList = cookieStore.getCookies();
HttpCookie temp = null;
// iterate HttpCookie object
for (HttpCookie cookie : cookieList) {
try {
String name = URLDecoder.decode(cookie.getName().replace("+", "%2B"), "UTF-8").replace("%2B", "+");
if(name.equals("catan.game")) {
System.out.println("catan.game cookie found");
temp = cookie;
}
} catch (UnsupportedEncodingException e) {
//System.out.println("Error decoding cookie... bummer...");
e.printStackTrace();
}
}
cookieList.remove(temp);
}
有没有办法解决这个问题或有更好的方法来做到这一点?
我发现了一个关于不可修改集合here 的类似问题,但尚未得到解答。感谢您的帮助!
【问题讨论】:
-
Erm ...你读过
CookieStore的javadoc吗?您是否阅读过它指定getCookies返回的集合是不可修改的?您是否了解名称以字母“r”开头的方法? -
“我在这里发现了一个关于不可修改集合的类似问题,但尚未得到解答。” - 坦率地说,我并不感到惊讶。答案是“不要那样做!”。
-
我在提出问题后读了一会儿,也许我应该删除它,但我想其他人可能一开始也错过了这一点,并从这个问题中受益。
标签: java cookies httpcookie