java — (Android) Проблемы с cookie в HttpClient, URL и HttpURLConnection

Я собираюсь добавить проверку капчи в форме регистрации в приложениях для Android. Но я обнаружил, что сервер дает мне сигнал, что сеанса нет. Наконец, я обнаружил, что cookie моего приложения ничего не хранит.

введите описание изображения здесь

Я не могу зарегистрировать аккаунт, даже если проверка правильна. Я уверен, что в моем php-сервере нет проблем, потому что я проверил это в браузере.

Я установил три типа подключения, чтобы проверить проблему с файлами cookie.

1) HttpClient

HttpResponse response = httpclient.execute(httppost);

2) URL

Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL("http://www.example.com/abc.png").getContent());

3) HttpURLConnection

private void send_post(HttpURLConnection connection,String variable_set) throws Exception
{
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", "" + Integer.toString(variable_set.getBytes().length));
connection.setUseCaches(false);

DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(variable_set);
wr.flush();
wr.close();
}

Также я добавляю этот код для настройки cookie.

CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

К сожалению, только HttpURLConnection успешно использует cookie и сервер показывает, что есть некоторые переменные сеанса. Тем не менее, мое приложение в основном использует URL и HttpClient.

Может кто-нибудь сказать мне, как включить cookie в HttpClient и URL?

0

Решение

Вот пример кода для установки JSESSIONID (сервера Apache Tomcat) в качестве файла cookie в Android. Надеюсь, что это даст вам представление о том, как сделать похожий процесс в PHP:

DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.setCookieStore(new BasicCookieStore());
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID<<or your variable name>>", <<ACTUAL VALUE>>);
cookie.setDomain(<<SET YOUR DOMAIN NAME HERE>>);
cookie.setPath("/");
httpClient.getCookieStore().addCookie(cookie);
HttpEntity httpEntity = null;
HttpResponse httpResponse = null;
// Checking http request method type
if (method == POST) {
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Accept", "application/json"); //use text/plain if response if HTTP response is plain text
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
if (formData != null) {
httpPost.setEntity(new UrlEncodedFormEntity(formData, HTTP.UTF_8));
}
httpResponse = httpClient.execute(httpPost);
} else if (method == GET) {
if (formData != null) {
String paramString = URLEncodedUtils.format(formData, "utf-8");
url += "?" + paramString;
}
HttpGet httpGet = new HttpGet(url);
httpResponse = httpClient.execute(httpGet);
}

status_code = httpResponse.getStatusLine().getStatusCode();
httpEntity = httpResponse.getEntity();
Log.i("Status Code After Login", "> >status code > >" + status_code + "> >url > >"+url);
if(status_code==200)
response = EntityUtils.toString(httpEntity);
else
response="fail";

<<response will contain the final HTTP response>>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]