2016-12-30 108 views
2

我正在從我的原生谷歌服務器的響應,以保持登錄到網頁視圖我的域名網址+簽到的OAuth2令牌,我設置的cookie:如何使用會話ID和用戶ID信息

String cookieSessionString = "JSESSIONID" + "=" + i.getStringExtra("C_session_id"); 
    String cookieEmailString = "useremail" + "=" + i.getStringExtra("C_user_email"); 
    String cookieNameString = "username" + "=" + i.getStringExtra("C_user_name"); 
    String cookieUseridString = "userid" + "=" + i.getStringExtra("C_user_id"); 
    CookieManager cookieManager = CookieManager.getInstance(); 
    CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(webView.getContext()); 
    cookieManager.setCookie("mydomain.co", cookieSessionString); 
    cookieManager.setCookie("mydomain.co", cookieEmailString); 
    cookieManager.setCookie("mydomain.co", cookieNameString); 
    cookieManager.setCookie("mydomain.co", cookieUseridString); 
    cookieManager.setAcceptCookie(true); 
    cookieSyncManager.getInstance().sync(); 

在的WebView我打電話:

 webView.getSettings().setAppCacheEnabled(true); 
     WebViewDatabase.getInstance(this).clearHttpAuthUsernamePassword(); 
     webView.getSettings().setDatabaseEnabled(true); 
     webView.getSettings().setDomStorageEnabled(true); 
     webSettings.getCacheMode(); 
     webView.loadUrl(base_url); 
webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       startActivity(new Intent(MainActivity.this, NoDataActivity.class).putExtra("Activity", "Main.class")); 
       super.onReceivedError(view, errorCode, description, failingUrl); 
      } 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
            view.loadUrl(url); 
       return true; 
      } 
      @Override 
      public void onLoadResource(WebView view, String url){ 
       CookieManager cookieManager = CookieManager.getInstance(); 
       cookie = cookieManager.getCookie(url); 
       Log.d("ONloadResource","cookie is"+cookie); 
      } 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       super.onPageFinished(view, url); 
       CookieManager cookieManager = CookieManager.getInstance(); 
       cookieManager.setCookie(url, cookie); 
       progressBar.setVisibility(View.GONE); 
       progressBar.setProgress(100); 
       if (url.contains("/ccavResponseHandler.jsp")) { 
        webView.loadUrl("javascript:window.HTMLOUT.processHTML ('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); 
       } 
      } 
      @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) { 
       super.onPageStarted(view, url, favicon); 
       progressBar.setVisibility(View.VISIBLE); 
       progressBar.setProgress(5); 
      } 

      }); 

而且還試圖發送頭,如:

extraHeaders.put("JSESSIONID", i.getStringExtra("C_session_id")); 
     extraHeaders.put("username", i.getStringExtra("C_user_name")); 
     extraHeaders.put("useremail", i.getStringExtra("C_user_email")); 
webView.loadUrl(url, extraHeaders);` 

沒有在網頁視圖升工作ogin ..!

任何人都可以幫助我如何使用會話ID和用戶電子郵件,身份證在web視圖中在我的域URL登錄。

+0

我得到谷歌令牌從谷歌+本地登錄api客戶端然後在asyntask我連接到我的服務器API與該令牌的會話ID ..現在我需要登錄到webview的細節..如何實現這一點 – sudhir

回答

1

你可能發現自己在Android上做的事情是Web認證。大多數網站發佈cookie來跟蹤會話ID並保持用戶登錄。爲了保持這種身份驗證,您需要保持cookie在活動之間以及http客戶端和webviews之間保持同步。

我最終做的這個方法似乎工作得很好,它創建了一個擴展了Application的類,然後定義了一個單獨的HttpClient用於整個應用程序的其餘部分。該代碼看起來像:

public class AppSettings extends Application { 
    private static final DefaultHttpClient client = createClient(); 

    @Override 
    public void onCreate(){ 
    } 

    static DefaultHttpClient getClient(){ 
      return client; 
    } 
    private static DefaultHttpClient createClient(){ 
      BasicHttpParams params = new BasicHttpParams(); 
      SchemeRegistry schemeRegistry = new SchemeRegistry(); 
      schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
      final SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory(); 
      schemeRegistry.register(new Scheme("https", sslSocketFactory, 443)); 
      ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry); 
      DefaultHttpClient httpclient = new DefaultHttpClient(cm, params); 
      httpclient.getCookieStore().getCookies(); 
      return httpclient; 
    } 

此類還創建了一個HttpClient的是適合AsyncTasks,使多個同時HTTP請求。對ClientConnectionManager使用ThreadSafeClientConnManager,讓您在AsyncTasks中運行http請求,而不必在按下後退按鈕並開始第二次或第三次時導致強制關閉。

它還創建了一個可在所有活動中訪問的單個默認Cookie存儲。您可以通過調用getClient()方法在其他活動中使用它。

例如

public class SomeActivity extends Activity { 
     static DefaultHttpClient mClient = AppSettings.getClient(); 
     ... 
     try { 

      HttpGet httpget = new HttpGet('URL'); 
      HttpResponse response; 
      response = mClient.execute(httpget); 
      ... 
     } 
     ... 
    } 

如果你覺得有必要使用網頁視圖,並需要它來訪問並使用相同的餅乾爲您的客戶端。您可以使用同步的CookieManager客戶端的cookie存儲區:(在onPageStarted法)

DefaultHttpClient mClient = AppSettings.getClient(); 


Cookie sessionInfo; 
List<Cookie> cookies = mClient.getCookieStore().getCookies(); 

if (! cookies.isEmpty()){ 
     CookieSyncManager.createInstance(getApplicationContext()); 
     CookieManager cookieManager = CookieManager.getInstance(); 

     for(Cookie cookie : cookies){ 
       sessionInfo = cookie; 
       String cookieString = sessionInfo.getName() + "=" + sessionInfo.getValue() + "; domain=" + sessionInfo.getDomain(); 
       cookieManager.setCookie("example.com", cookieString); 
       CookieSyncManager.getInstance().sync(); 
     } 
} 

你需要切換example.com與正確的域。

+0

嗨Siddhesh,它不工作.plz檢查我的logi ma得到這些餅乾爲 – sudhir

+0

D/ONpagestared:cookie isPHPSESSID = mt51f22f0opo7o884ushxxxxx; CL = Bilekahalli +柵極; PL = Bilekahalli +柵極; _gat = 1; _ga = GA1.2.474183444.1483288660;報價=關閉; JSESSIONID = E1EB02DD53BEF404XXXXXXXXXXxx; [email protected];用戶名= Sudheer; userid = 48 01-02 09:40:15.182 10133-10133/com.demo.app D/ONPagefinished:cookie isPHPSESSID = mt51f22f0opo7o884ushxxxxx; CL = Bilekahalli +柵極; PL = Bilekahalli +柵極; _gat = 1;報價=關閉; JSESSIONID = E1EB02DD53BEF404xxxxxxxxxxxx; [email protected];用戶名= Sudheer;用戶ID = 48; _ga = GA1.2.474183444.1483288660 – sudhir

+0

這是你的餅乾 – siddhesh