android中HttpClient獲取Session然後使用 WebView共享session的解決辦法(轉)

yangxi_001發表於2015-03-11
    android開始專案中,通常會遇到既使用HttpClient,又使用WebView的情況。一個典型的例子是,使用HttpClient登入,WebView展示登入後的某些頁面,這個時候,如果直接不加任何處理的話會發現在使用WebView展示的時候,會提示沒有登入你的應用系統,造成這種結果的原因就是使用HttpClient登入的session和WebView訪問伺服器的session並不是同一個,解決辦法如下。
HttpClient 登入程式碼如下
    DefaultHttpClient client = new DefaultHttpClient();
    HttpGet get = new HttpGet(url);
    HttpContext context = new BasicHttpContext();
    CookieStore cookieStore = new BasicCookieStore();
    context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    HttpResponse response = client.execute(get, context);
    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            // 根據你的邏輯,判斷返回的值是不是表示已經登入成功
            if (isLoginSuccess()) {
                   List cookies = cookieStore.getCookies();
   if (!cookies.isEmpty()) {
         for (int i = cookies.size(); i > 0; i --) {
Cookie cookie = cookies.get(i - 1);
if (cookie.getName().equalsIgnoreCase("jsessionid")) {
                                                // 使用一個常量來儲存這個cookie,用於做session共享之用
Utils.appCookie = cookie;
}
}
}
            }
    }
WebView程式碼
String url4load = "登入域名下你要訪問的地址";
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
Cookie sessionCookie = Utils.appCookie;
if (sessionCookie != null) {
String cookieString = sessionCookie.getName() + "=" + sessionCookie.getValue() + "; domain=" +            sessionCookie.getDomain();
cookieManager.setCookie(url4Load, cookieString);
CookieSyncManager.getInstance().sync();
}

相關文章