У меня проблема с моим Android-приложением и файлами php.PHP-сессии не работают в Android?
У меня есть два PHP файлов: * первый подключаются после долгих если/другие блоков:
[...]
else{
$response["message"]="Connexion OK";
session_start();
$_SESSION['id'] = $id;
$_SESSION['pseudo'] = $pseudo;
$_SESSION['options'] = $options;
$response['session'] = $_SESSION['id'];
}
[...]
echo json_encode($response);
Моего второго файл только вернуться, если он подключен или нет:
<?php
session_start();
$response =0;
if(isset($_SESSION['id'])){
$response= 1;
}
echo $response;
? >
Когда я выполняю URL-адрес файлов в Firefox, в следующем порядке: 1/второй, у меня есть 0 2/Первый кусок 3/Второе, я получаю 1
Файлы Php хорошо конструируются!
Теперь я хочу сделать это в AsyncTasks Android: где бы я ни был, в первую очередь хочу проверить подключение пользователя к второму файлу: но возврат всегда 0 ... не подключен, даже после того, как я был зарегистрирован с первым, который вызывается в Connexion Activity.
Есть ли что-то еще в Android для открытия сеансов Php?
Спасибо за ответы,
Вот мой код: У меня есть AsyncTask для связи:
private class AddDataAsyncTask extends AsyncTask<Void, Void, Void> {
String message = "";
[...] //preExecute
@Override
protected Void doInBackground(Void... params) {
Log.i("add", " start doInBackground");
// Making a request to url and getting response
String urlt = url;
if (nameValuePair != null) {
String paramString = URLEncodedUtils.format(nameValuePair, "utf-8");
}
String response = "";
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
CookieStore cookieStore = new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpGet post = new HttpGet(urlt);
HttpResponse rp = httpClient.execute(post);
if (rp.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
// Server is unavailable
}
response = EntityUtils.toString(rp.getEntity()); //here is your response
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
/* } catch (UnsupportedEncodingException e) {
e.printStackTrace();
*/
if (response != null) {
try {
JSONObject JsonResponse = new JSONObject(response);
message = JsonResponse.getString("message");
if (message.equals("Connexion OK"))
session = Integer.parseInt(JsonResponse.getString("session"));
Log.i("connnnnnexionC", response);
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
[...] // postExecute }
И мой AsyncTask, где я хочу проверить связь:
private class VerifierConnexionAsyncTask extends AsyncTask<Void, Void, Void> {
[...] //preExecute
@Override
protected Void doInBackground(Void... params) {
String response = "";
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpEntity httpEntity = null;
HttpResponse httpResponse = null;
CookieStore cookieStore = new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpPost httpPost = new HttpPost(url);
httpResponse = httpClient.execute(httpPost);
httpEntity = httpResponse.getEntity();
response = EntityUtils.toString(httpEntity);
Log.i("connnnnexion",response);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
[...]//postExecute
}
Сначала я ввожу чек результат:
I/connnnnexion: 0
Я хожу в Connexion активность и я вошел, используя первый AsyncTask: Я получил:
I/connnnnnexionC : { "сообщение": "Connexion OK", "сессия": "27"}
Так хорошо соединить
Я повторно чек, и снова у меня есть:
I/connnnnexion: 0
РЕШЕНИЕ Я написал новый класс присоединен:
import org.apache.http.client.CookieStore;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
public class Connecte {
static CookieStore cookieStore;
static HttpContext localContext;
public static void makeCookie(){
cookieStore = new BasicCookieStore();
localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
}
}
В связи AsyncTask добавить: Connexion.makeCookie():
HttpGet post = new HttpGet(urlt);
Connecte.makeCookie();
HttpResponse rp = httpClient.execute(post, Connecte.localContext);
И в чековой AsyncTask я просто добавить:
HttpPost httpPost = new HttpPost(url);
httpResponse = httpClient.execute(httpPost, Connecte.localContext);
@ ImFabien75 Если это вам помогло, пожалуйста, примите/повысите его. – d0nut
Благодарим вас за ответ. Перед тем, как перенести его, просто чтобы убедиться: я пишу: CookieHandler.setDefault (новый CookieManager (null, CookiePolicy.ACCEPT_ALL)); в каждом действии, когда я хочу протестировать Connexion, перед тем, как открыть php-файл? – ImFabien75
@ ImFabien75 вы пишете что? Ваш комментарий отключен – d0nut