Я пытаюсь использовать куки-файлы, чтобы провести сеанс в своем приложении для Android, но похоже, что у меня что-то не так, потому что я никогда не получаю ожидаемого ответа от моего сервера.HttpContext не держит куки
Сначала у меня есть процедура входа в систему, которая работает как ожидалось и возвращает все ожидаемые данные.
Мой запрос Логин:
HttpContext httpContext = new BasicHttpContext();
HttpResponse response;
HttpClient client = new DefaultHttpClient();
String url = context.getString(R.string.url_login);
HttpPost connection = new HttpPost(url);
connection.setHeader("Content-Type","application/x-www-form-urlencoded");
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair(PARAM_LOGIN,params[0]));
nameValuePair.add(new BasicNameValuePair(PARAM_PASSWORD,params[1]));
connection.setEntity(new UrlEncodedFormEntity(nameValuePair,"UTF-8"));
response = client.execute(connection,httpContext);
data = EntityUtils.toString(response.getEntity());
После Я мой ответ Я просто делаю то, что когда-нибудь мне нужно с данными, а затем вещи начинают падать часть. Потому что теперь я просто пытаюсь вызвать свой сервер в той же AsyncTask, чтобы проверить, правильно ли сохранены мои файлы cookie в моем HttpContext.
В первый раз я назвал свой адрес без каких-либо изменений, просто повторно использовать свой текущий HttpContext:
HttpPost httpPost = new HttpPost(context.getString(R.string.url_cookie_test));
HttpResponse response = client.execute(httpPost, httpContext);
Поскольку этот тест не я проверил, чтобы добавить свою ценность печенья на моем HttpPost заголовок:
httpPost.addHeader(context.getString(R.string.domain),PHPSESSID+"="+cookieID+";");
Затем я попытался создать новую HttpContext и заставить COOKIE_STORE:
CookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie(PHPSESSID, cookieID);
cookieStore.addCookie(cookie);
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpResponse response;
HttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(context.getString(R.string.url_cookie_test));
response = client.execute(connection,localContext);
Все выходит из строя, и я уже подтвердил, что, когда я первый получить мой ответ логина я получил данные, ожидаемые от печений, как можно увидеть ниже:
List<Cookie> cookies = ((AbstractHttpClient) client).getCookieStore().getCookies();
for (Cookie cookie: cookies){
Log.i("Cookie Value",cookie.toString());
/*
Prints:[[version: 0][name: PHPSESSID][value: 2ebbr87lsd9077m79n842hdgl3][domain: mydomain.org][path: /][expiry: null]]
*/
}
Я уже искал на StackOverflow, и я нашел тонна решений, которые на самом деле не работал для меня, разделит все решения я уже пробовал:
Android: Using Cookies in HTTP Post request
Sending cookie with http post android
Apache HttpClient 4.0.3 - how do I set cookie with sessionID for POST request
Почему вы не добавляете свои заголовки с помощью httpPost.setHeader («ключ», «значение») вместоOfDeader? Я решил несколько вопросов с этим изменением, и это заставило меня потерять много часов ... Я не знаю, если это проблема, но я думаю, что это достойно доказательства –
Спасибо за предложение, просто протестировали его, и я продолжаю получать тот же ответ (файлы cookie недоступны). – GhostDerfel
Я думаю, что у меня есть код, который может быть вам полезен. Это для подключения Android к серверу Spring mvc с файлами cookie, но я думаю, что tgat, может быть, может вам помочь. Я не против поделиться им с вами. Это не ваш ответ, но позвольте мне помочь вам :).Я приду с ним позже с этим –