Cookie问题,旧cookie在提出请求时仍然存在

时间:2011-05-17 18:59:53

标签: java android google-app-engine cookies

我目前正在Android上开发一个应用程序,使用App Engine作为后端。由于进行了一些繁重的解析,我有时需要将会话cookie从android设备传递到服务器,以便在解析响应数据时进行身份验证。

下面的代码来自服务器端,我在服务器HttpUrlConnection对象中放置了从我的android设备传递的Cookie。现在我的问题。

即使我将有效的会话cookie传递给服务器,我仍然遇到了未经过身份验证的巨大问题。经过几天的调试,似乎我今天发现了这个问题,但我不清楚如何解决这个问题。

使用Microsoft网络监视器,当我从服务器发出请求时,我可以看到SOMETIMES,但并非总是如此,请求中有第二个cookie,BESIDES是我放在HttpUrlConnection中的那个。这似乎混淆了第三方服务器,它使用Set-cookie进行响应,而不是让我访问安全页面。

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("&amp;", "&");
    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();
}

1 个答案:

答案 0 :(得分:0)

我终于通过创建自己的“版本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=/");