Я собираюсь добавить проверку капчи в форме регистрации в приложениях для 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?
Вот пример кода для установки 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>>
Других решений пока нет …