CookieManager теряет куки при закрытии приложения?
Я работаю над приложением, которое общается с сервером и имеет экран входа в систему. Я использую httpconnection для связи с сервером (сервер отправляет ответ Json обратно). Мой экран входа в систему отправляет электронную почту и пароль, которые проверяются сервером - который отправляет cookie и ожидает cookie при каждом последующем запросе о том, что пользователь вошел в систему.
Я использую Cookiemanager и обработчик cookie, чтобы включить сеанс, чтобы пользователь мог войти только один раз.
Использование ниже 2 команд в моей основной деятельности (на метод Create)
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
Рабочая модель заключается в том, что моя основная деятельность - отправлять команду чтения на сервер, который проверяет, вошел ли пользователь в систему или нет (ожидает cookie с идентификатором внутри), и отправляет статус в формате json. Если статус равен 0, он переходит в режим входа в систему в противном случае на домашний экран.
В процессе входа в систему я отправляю команду входа в систему с именем пользователя и паролем, а сервер отправляет cookie-файл (отправляет уникальный идентификатор, который он перепроверяет при любом последующем запросе для подтверждения пользователя) обратно с ответом json.
После входа в систему я перехожу на домашний экран и читаю статус, и, поскольку я создал CookieManager в основном действии, он автоматически отправляет cookie с каждым httprequest.
Проблема в том, что - когда я выхожу из приложения и возвращаюсь после выполнения входа в систему... он снова начинается с основной активности и переходит на экран входа в систему вместо домашнего экрана. Я не могу понять, почему это так и как заставить моего пользователя войти в систему один раз, и после этого он сохраняет cookie, даже если он выходит из приложения.
Я думал CookieManager сохраняет cookie даже после вашего выхода. Это потому, что я создаю объект Cookie Manager в методе create, а когда приложение закрывается и перезапускается, оно снова создает новый объект? Или мое предположение неверно.
2 ответа
По умолчанию new CookieManager()
будет хранить куки в памяти.
Однако вы можете использовать другой конструктор, чтобы изменить это поведение: CookieManager(CookieStore store, CookiePolicy cookiePolicy)
,
Есть хотя бы пара стойких java.net.CookieStore
реализации:
If I move the Cookiemanager to the application class, it's just get called once and solve this issue.
public class application extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
}
public static Context getContext() {
return application.context;
}