詳細検索

Android: Sincronizar sessões entre WebView e HttpClient

Avatar
por furuyamah
2 min de leitura
Tags

Android: Sincronizar sessões entre WebView e HttpClient
Traduzido do 日本語 • Ver original

Depois de fazer login com o WebView, quando ligo para o HttpClient... E vice-versa.

No Android, WebView e HttpClient parecem ser tratados como navegadores separados.

Esse assunto já foi explicado aqui e ali.

[[Android]WebView, Sessão de Compartilhamento com HTTPClient] (http://d.hatena.ne.jp/shohhei1126/20120110/p1)

Integração com HttpClient e WebView

No entanto, criei uma aula que só sincroniza para que eu não precise pensar em nada. Se quiser, por favor, faça isso.

 

 

 

[code lang="java" light="true"] pacote your.package;

import java.util.List;

importar org.apache.http.cliente.CookieStore; importar org.apache.http.cookie.Cookie; importar org.apache.http.impl.client.DefaultHttpClient; importar org.apache.http.impl.cookie.BasicClientCookie;

importar android.webkit.CookieManager; importar android.webkit.CookieSyncManager;

/** * HttpClient, classe para sincronizar sessões entre WebViews */ classe pública SessionSync {

Especifique o domínio de onde o COOKIE será enviado
sequência final estática privada YOUR_DOMAIN = "seu.domínio"; 

Domínio de recuperação de COOKIE (com um . para cobrir subdomínios)
final estática privada COOKIE_DOMAIN = "." + YOUR_DOMAIN; 
URL para enviar COOKIE
estática privada final COOKIE_URL = "http://" + YOUR_DOMAIN; 

Especifique o nome do parâmetro para armazenar o ID da sessão
Este é um exemplo de PHP
estática privada final String SESSID = "PHPSESSID"; 

/** 
 * Sincronizar o ID da sessão no lado HttpClient com o WebView
 *  
 * @param HttpClient para sincronizar a sessão
 */ 
empty estático público httpClient2WebView(DefaultHttpClient httpClient) { 
    Loja CookieStore = httpClient.getCookieStore(); 
    Lista<Cookie> cookies = store.getCookies(); 
    CookieManager cookieManager = CookieManager.getInstance(); 
    for (Cookie cookie : cookies) { 
        if (cookie.getDomain().indexOf(COOKIE_DOMAIN) < 0) { 
            continue; 
        }
        se (! SESSID.igual(cookie.getName())) { 
            continue; 
        }
        Se você deletar aqui, o cookie que você definiu no momento da sincronização também será
        A exclusão não é permitida porque pode desaparecer
        cookieManager.removeSessionCookie(); 
        String cookieStr = cookie.getName() + "=" + cookie.getValue(); 
        cookieManager.setCookie(COOKIE_DOMAIN, cookieStr); 
        CookieSyncManager.getInstance().sync(); 
    }
}

/** 
 * Sincronizar o ID da sessão no lado do WebView com o HttpClient
 *  
 * @param HttpClient para sincronizar a sessão
 */ 
public static void webView2HttpClient(DefaultHttpClient httpClient) { 

    String cookie = CookieManager.getInstance().getCookie(COOKIE_URL); 
    String[] cookies = cookie.split("; "); 
    for (String keyValue : cookies) { 
        keyValue = keyValue.trim(); 
        String[] cookieSet = keyValue.split("="); 
        String key = cookieSet[0]; 
        Valor da string = cookieSet[1]; 
        se (! SESSID.iguales(chave)) { 
            continue; 
        }
        BasicClientCookie bCookie = novo BasicClientCookie(chave, valor); 
        bCookie.setDomain(COOKIE_DOMAIN); 
        bCookie.setPath("/"); 
        Loja CookieStore = httpClient.getCookieStore(); 
        store.addCookie(bCookie); 
    }
}

} [/código]

Related Articles