Cookie问题,请求时仍保留旧Cookie
问题描述:
我目前正在Android上开发一个应用程序,并使用App Engine作为后端。由于存在一些严重的解析,我有时需要将会话cookie从android设备传递到服务器,以便在解析响应数据时进行身份验证。Cookie问题,请求时仍保留旧Cookie
下面的代码是从服务器端,我把我的android设备传递的Cookie放在服务器HttpUrlConnection对象中。现在到我的问题。
即使我将有效的会话cookie传递给服务器,我仍然遇到了未经过身份验证的巨大问题。经过几天的调试,似乎我今天发现了这个问题,但我不知道如何解决这个问题。
使用Microsoft网络监视器,我可以看到有时候,当我从服务器发出请求时,但并不总是,请求中有第二个cookie,BESIDES是我放入HttpUrlConnection的那个。这似乎混淆了第三方服务器,它使用Set-cookie进行响应,而不是让我访问安全页面。
的饼干看起来像这样:
The cookie that I set
Cookie: PHPSESSID=q5r4uon05a32vhs29cd65sarv6
The second cookie, that just "appears" when I make the request
Cookie: $Version=0; PHPSESSID=hb94i7vopft13uaaob837lf3b0; $Path=/
那么,什么是这个版本0的cookie,以及如何确保它不会在我的要求通过?
ArrayList<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
URL page = null;
Scanner scanner = null;
Session session = null;
HttpURLConnection connection = null;
try {
link = link.replace("&", "&");
page = new URL(FS_PARTIAL_SESSION_URL + link);
StringBuilder sb = new StringBuilder();
Iterator<Cookie> cooks = cookies.iterator();
while(cooks.hasNext()) {
Cookie cookie = cooks.next();
sb.append(cookie.getName()+"="+cookie.getValue());
if (cooks.hasNext()) {
sb.append(";");
}
}
connection = (HttpURLConnection) page.openConnection();
connection.setRequestProperty("Cookie", sb.toString());
scanner = new Scanner(connection.getInputStream());
} catch (MalformedURLException e) {
log.log(Level.SEVERE, e.getMessage(), e);
} catch (IOException e) {
log.log(Level.SEVERE, e.getMessage(), e);
}
finally {
connection.disconnect();
}
答
我终于通过创建我自己的“版本0”cookie解决了这个问题。当这样做的时候,看起来第二个cookie不会被创建,或者至少我自己的cookie被取代。因此,在我的while循环中,代码现在看起来像这样:
Cookie cookie = cooks.next();
sb.append("$Version=0; ");
sb.append(cookie.getName()+"="+cookie.getValue());
if (cooks.hasNext()) {
sb.append(";");
}
sb.append("; $Path=/");