Ошибка файла cookie, старый файл cookie остается при выполнении запроса - PullRequest
0 голосов
/ 17 мая 2011

В настоящее время я разрабатываю приложение для Android, используя в качестве бэкенда App Engine. Поскольку происходит сильный анализ, мне иногда нужно передавать сессионные cookie-файлы с устройства Android на сервер для проверки подлинности при анализе данных ответа.

Приведенный ниже код взят со стороны сервера, где я помещаю файлы cookie, передаваемые с моего устройства Android, в объект сервера HttpUrlConnection. Теперь к моей проблеме.

У меня были огромные проблемы с тем, что я не прошел проверку подлинности, даже несмотря на то, что я передаю действительный файл cookie сеанса на сервер. После нескольких дней отладки кажется, что я нашел проблему сегодня, но я понятия не имею, как это исправить.

Используя сетевой монитор Microsoft, я вижу, что ИНОГДА, когда я делаю запрос с сервера, но не всегда, в запросе есть второй файл cookie, кроме того, который я добавил в 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=/

Итак, что это за файл cookie версии 0 и как я могу убедиться, что он не передан в моем запросе?

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 голосов
/ 28 июня 2011

Наконец-то я решил эту проблему, создав собственный файл cookie версии 0. При этом создается впечатление, что второй файл 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=/");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...