Esta é uma maneira legal e totalmente transparente de manter uma sessão ativa (usuário logado ou qualquer outra coisa) em aplicativos Android.
Ele usa o apache DefaultHttpClient dentro de um Singleton e um HttpRequest / Response Interceptors.
A classe SessionKeeper simplesmente verifica se um dos cabeçalhos é Set-Cookie e, se for, simplesmente se lembra dele.
O SessionAdder simplesmente adiciona o id da sessão à solicitação (se não for nulo).
Desta forma, você todo o processo de autenticação é totalmente transparente.
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();
}
}
}
}