Полностью прозрачный способ поддерживать сеанс активным (пользователь вошел в систему или что-то еще) в приложениях Android.Он использует apache DefaultHttpClient внутри Singleton и перехватчики HttpRequest / Response.
Класс SessionKeeper просто проверяет, является ли один из заголовков Set-Cookie, и если он делает, он просто запоминает его.SessionAdder просто добавляет идентификатор сеанса к запросу (если не ноль).Таким образом, весь процесс аутентификации полностью прозрачен.
public class HTTPClients {
private static DefaultHttpClient _defaultClient;
private static String session_id;
private static HTTPClients _me;
private HTTPClients() {
}
public static DefaultHttpClient getDefaultHttpClient(){
if ( _defaultClient == null ) {
_defaultClient = new DefaultHttpClient();
_me = new HTTPClients();
_defaultClient.addResponseInterceptor(_me.new SessionKeeper());
_defaultClient.addRequestInterceptor(_me.new SessionAdder());
}
return _defaultClient;
}
private class SessionAdder implements HttpRequestInterceptor {
@Override
public void process(HttpRequest request, HttpContext context)
throws HttpException, IOException {
if ( session_id != null ) {
request.setHeader("Cookie", session_id);
}
}
}
private class SessionKeeper implements HttpResponseInterceptor {
@Override
public void process(HttpResponse response, HttpContext context)
throws HttpException, IOException {
Header[] headers = response.getHeaders("Set-Cookie");
if ( headers != null && headers.length == 1 ){
session_id = headers[0].getValue();
}
}
}
}