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

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