Вопрос про AsyncTask HttpURLConnection. КАк сохранить сессию

Отправляю на сервер с php GET запросы, и на каждый ответ получаю новую сессию. Можно ли как то получать ответы в одной сессии php?


Ответы (1 шт):

Автор решения: Вася Воронцов

Пусть нужная строка, содержащая в себе PHPSESSID, называется ssid, тогда следовало бы сделать следующее:

String ssid = null;

class Conn extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... strings) {
        try {
            URL url = new URL("https://yourwebsite.com");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setDoInput(true);
            con.setDoOutput(true);
            if (ssid != null) con.setRequestProperty("Cookie", ssid);
            con.connect();
            List<String> cookies = con.getHeaderFields().get("Set-Cookie");
            for (String value : cookies)
                if (value.contains("PHPSESSID")) ssid = value.substring(0, value.length() - 8);
                /* Не уверен, что всегда в конце PHPSESSID ставится
                  "; path=/", но в моих опытах он был, поэтому -8 */
            con.disconnect();
        } catch (Exception e) {
            //output e.toString();
        };
    };
    return "finish";
};

Уже в AsyncTask проверяется значение ssid, поэтому, скорее всего, нужно будет выполнить его перед началом работы, а потом уж собственно запросы.

→ Ссылка