Android HttpURLConnection: почему Linux каждый раз создает файл сеанса

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

Почему Linux создает файлы сеанса каждый раз
только когда я подключаюсь к телефону, который использует httpURLConnection ???

Когда я подключаюсь к веб-странице без входа в систему с помощью веб-браузера (Chrome),
Linux делает файл сеанса пустым ‹---(A)

Затем я подключаю веб-страницу с логином с помощью веб-браузера (Chrome),
Linux создает файл сеанса, который добавляется в файл сеанса (A).

так. результат. Если я использую веб-браузер, Linux создает файл сеанса, только 1.

Но!
Когда я подключаюсь по телефону (приложению),
Linux создает файл сеанса каждый раз, когда я вхожу в систему,


Это значит

Вход в приложение -> (Linux создает сеанс)
Нажатие назад -> Вход в приложение -> (Linux создает сеанс)
Нажатие назад -> Вход в приложение -> (Linux создает сеанс)

** Я проверил PHPSESSID в Logcat и кэшировал SQL, используя диспетчер синхронизации файлов cookie.

Android HttpURLConnection Header Part Source

    URL urlLogin = new URL(url);
    HttpURLConnection httpConn = (HttpURLConnection) urlLogin.openConnection();
    httpConn.setDefaultUseCaches(true);
    httpConn.setDoInput(true);
    httpConn.setDoOutput(true);
    httpConn.setUseCaches(true);
    httpConn.setInstanceFollowRedirects(false);
    httpConn.setRequestMethod("POST");
    httpConn.setRequestProperty("content-type", "application/x-www-form-urlencoded;charset=utf-8");
    httpConn.setRequestProperty("Connection", "keep-alive");

Серверная часть входа в PHP

<?php
session_start();
require_once "dbconn.php";
require_once "check.php";
require_once "process.php";

$email = $_POST['email'];
$pw = $_POST['pw'];

$process = new Process($_POST);

if ($process->checkLogin()) { //Check Login matches
    $_SESSION['email'] = $email;
    $_SESSION['pw'] = $pw;
    $_SESSION['logged'] = true;

    $errcode = 100;
}

person JuHyun Lee    schedule 28.01.2012    source источник


Ответы (1)


Предполагая, что «файл сеанса» == «файл cookie сеанса», возможно, вы не включили управление файлами cookie для HttpUrlConnection. Как описано в документации, вам нужно использовать CookieHandler и CookieManager для это:

CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
person CommonsWare    schedule 28.01.2012
comment
Спасибо, но CookieHandler.setDefault (переменная обработчика файлов cookie НЕОБХОДИМА) - person JuHyun Lee; 28.01.2012
comment
и новый CookieManager() ‹-- показывает эту ошибку: конструктор CookieManager() не виден - person JuHyun Lee; 28.01.2012
comment
Я подозреваю, что вы импортировали неправильный класс CookieManager. Вам нужно java.net.CookieManager. - person CommonsWare; 28.01.2012
comment
отстой .... Это был java.net.CookieManager Но это проблема с версией Android SDK ....: ‹ требуется 2.3.3 поверх..... Мой проект основан на 2.2 !!!!! Т_Т - person JuHyun Lee; 28.01.2012
comment
@JuHyunLee: Если вы используете Android 2.2, переключитесь на использование библиотеки HttpClient, встроенной в Android (org.apache.http). Пока вы повторно используете один и тот же объект HttpClient для каждого запроса, файлы cookie сеанса будут сохраняться для вас. - person CommonsWare; 28.01.2012
comment
Но я слышал об ошибках httpClient close() и httpurlconnection лучше... Я должен подумать об этой проблеме... Большое спасибо! - person JuHyun Lee; 28.01.2012