2013-05-30 68 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循环以包含下面的所有逻辑。你的复制代码看起来很好,我希望这是如果你有时可以使它工作。