php сессия уничтожена в приложении Android - PullRequest
1 голос
/ 10 мая 2011

Я создаю приложение для входа в Android, в котором я нажимаю URL (с именем пользователя и паролем) до этой части, она работает нормально, но после этого всякий раз, когда я нажимаю URL (после аутентификации пользователя), он ничего не возвращает(то есть сообщение об ошибке, например, сначала войдите в систему).Однако он отлично работает в очень похожих приложениях для iphone и в браузере.

Я не мог понять, в чем собственно проблема.Есть ли какие-либо проблемы на стороне сервера (т.е. в кодировании php) или что-то не так с приложением для Android.На самом деле мы не можем винить кодирование на стороне сервера, потому что оно отлично работает для того же приложения для iphone и для браузера.

Любая идея или помощь будут высоко оценены.Спасибо.

Ответы [ 2 ]

5 голосов
/ 10 мая 2011

Ваш скрипт Php использует маркер сеанса для идентификации посетителя, когда вы просматриваете сайт через браузер. Обычно он хранится в переменной PHPSESSID.

Если вы хотите, чтобы приложение Android оставалось аутентифицированным на стороне сервера, вам нужно получить этот идентификатор после первого подключения и затем отправить его в заголовки всех ваших последующих запросов.

** РЕДАКТИРОВАТЬ: ** Это то, что вы хотите сделать: Как мне управлять куки с HttpClient в Android и / или Java?

1 голос
/ 09 ноября 2014

Вы можете использовать активное соединение DefaultHttpClient и выполнять проверки по каждому мобильному запросу, на стороне сервера, через $_SESSION.Вот небольшой пример кода (не для производства)

Сначала есть класс:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

public class NetClient {

    private HttpClient client = null;

    public NetClient() {
        client = new DefaultHttpClient();
    }

    public String request(String url) throws ClientProtocolException, IOException {
        HttpPost post = new HttpPost(url);
        HttpResponse res = client.execute(post);

        BufferedReader br = new BufferedReader(new InputStreamReader(res.getEntity().getContent()));
        String data = "";
        String line = "";
        while ((line = br.readLine()) != null) {
             data = data + line;
        }
        return data;
    }

    public String login(String url) throws ClientProtocolException, IOException {
        HttpPost post = new HttpPost(url);

        ArrayList pa = new ArrayList();
        pa.add( new BasicNameValuePair( "username", "admin"));
        pa.add( new BasicNameValuePair( "password", "admin"));
        post.setEntity( new UrlEncodedFormEntity(pa, "UTF-8"));

        HttpResponse res = client.execute(post);

        BufferedReader br = new BufferedReader(new InputStreamReader(res.getEntity().getContent()));
        String data = "";
        String line = "";
        while ((line = br.readLine()) != null) {
             data = data + line;
        }
        return data;
    }
}

Затем на mainactivity.java

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

try {
    NetClient n = new NetClient();

    String k = n.login("http://x.com/testAREA/securetrans/login.php");
    Log.w("login result", k);

    String l = n.request("http://x.com/testAREA/securetrans/content.php");
    Log.w("ask if logged in", l);

} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Где login.1022 * Более подробная информация по адресу: http://www.pipiscrew.com/2014/11/phpandroid-secure-connection-with-session-variable/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...