2013-05-30 66 views
0

我在Andriod和Iphone中使用ASP.NET作爲後端應用程序。我通過使用HttpClient類附加Session_Id cookie來發送請求到我的ASP.NET服務器API,這很好用。但我也需要在WebView中發送相同的會話。問題是WebView有時會發送Session_Id cookie,有時卻不會。這對我來說很奇怪。我無法找到爲什麼有時webview發送cookie,有時沒有。這裏是我的代碼,Android WebView中的奇怪Cookie問題?

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    myapp = ((....) getApplicationContext()); 
    setTimeout(true); 
    try { 
    getActionBarHelper().setupHomeActivity(); 

    } catch (Exception e) { 
    e.printStackTrace(); 
    } 

    cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE); 
    webView = new CustomWebView(this, this); 
    webView.getWebView().addJavascriptInterface(new MyJavaScriptInterface(), "android"); 
    getTimeDiff(); 

    if(MyApplication.INSTANCE.isLoggedin()){ 
    Cookie sessionCookie = MyApplication.INSTANCE.getCookie(); 

    List<Cookie> cookies = MyApplication.INSTANCE.getClient().getCookieStore().getCookies(); 
    for (int i = 0; i < cookies.size(); i++) { 
     sessionCookie = cookies.get(i); 
    } 

    try{ 
    if(sessionCookie!=null){ 

     CookieManager cookieManager = CookieManager.getInstance(); 
     cookieManager.setAcceptCookie(true); 
     if (sessionCookie != null) { 
      cookieManager.removeSessionCookie(); 
      String cookieString = sessionCookie.getName() + "=" 
        + sessionCookie.getValue() + "; domain=" 
        + sessionCookie.getDomain(); 

      if (MyApplication.isDebug()) 

      cookieManager.setCookie(sessionCookie.getDomain(),(sessionCookie.getName() + "=" + sessionCookie.getValue())); 
      CookieSyncManager.getInstance().sync(); 
    }else{ 
    if (MyApplication.isDebug()) 
     Log.d("WebView", " Cookie is null: "); 
    } 
    }else{ 
    if (MyApplication.isDebug()) 
     Log.d("WebView", " Cookie is null: "); 
    } 
    }catch (Exception e) { 
    e.printStackTrace(); 
    } 

    Log.e("WenView", "============================ "); 

    } 

    } 

回答

1

您的循環似乎只包含檢索Cookie中的一行......所以你的邏輯的設置下面只有餅乾被調用一次,無論最後一塊餅乾正好是。由於曲奇沒有在列表中排序,這可能解釋了爲什麼它有時會起作用,有時它不起作用;當你的cookie是最後的時候它正在工作,否則失敗。

答案是隻擴展你的for循環以包含下面的所有邏輯。你的複製代碼看起來很好,我希望這是如果你有時可以使它工作。