使用webview加載網頁時session同步


直接調用Android的webview加載URL時,由於需要登錄的session導致URL無法顯示,解決方案是在需要訪問的URL中加session:

         String reporturl = "http://xxx.xxx.xx";
	 CookieSyncManager.createInstance(getApplication());
 	 CookieManager cookieManager = CookieManager.getInstance();
	 CookieSyncManager.getInstance().startSync();
	 List<Cookie> sessionCookie = MyApplication.getAppCookie();
	 String re= cookieManager.getCookie(reporturl);
	   if (sessionCookie != null) {
 		  for (int i = 0; i < sessionCookie.size(); i++) {
	            Cookie cookie = sessionCookie.get(i);
	            String cookieString=cookie.getName() + "=" + cookie.getValue()    //path與Domain必須加上
	                    + "; path=" + cookie.getPath()
	                    + "; domain=" + cookie.getDomain();
	            cookieManager.setCookie(reporturl, cookieString);
	        }
		 String re2= cookieManager.getCookie(reporturl);
	         CookieSyncManager.getInstance().sync();
	 }
	

 其中sessionCookie是在登錄時放入MyApplication中的:

         HttpPost httpPost = new HttpPost(url);   
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); httpClient.getParams().setIntParameter("http.socket.timeout", 3000); HttpResponse response = httpClient.execute(httpPost); String result = EntityUtils.toString(response.getEntity(),HTTP.UTF_8); Log.d(TAG, "HTTP Response: " + result); List<Cookie> cookies = httpClient.getCookieStore().getCookies(); MyApplication.setAppCookie(cookies);

然后可以加載URL了:

      myWebView.getSettings().setJavaScriptEnabled(true);  
      myWebView.getSettings().setSupportZoom(true); 
      myWebView.getSettings().setAppCacheEnabled(true);
      //設置緩存模式
      myWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
      myWebView.loadUrl(reporturl);
      myWebView.getSettings().setBuiltInZoomControls(true);
      myWebView.getSettings().setUseWideViewPort(true);
      myWebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
      myWebView.getSettings().setLoadWithOverviewMode(true);
      myWebView.setWebViewClient(new WebViewClient(){
          public boolean shouldOverrideUrlLoading(WebView view, String url) {  //重寫此方法表明點擊網頁里面的鏈接還是在當前的webview里跳轉,不跳到瀏覽器那邊
               view.loadUrl(url);
               return true;
          }});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM