Android WebView中的奇怪Cookie问题?

时间:2013-05-30 08:19:09

标签: android asp.net android-webview

我在Andriod和Iphone中使用原生应用程序,并将ASP.NET作为后端。我通过使用HttpClient类附加Session_Id cookie来向我的ASP.NET服务器API发送请求。但我还需要在WebView中发送相同的会话。问题是WebView有时会发送Session_Id cookie,有时则不会。这对我来说很奇怪。我无法找到为什么有时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 个答案:

答案 0 :(得分:1)

你的for循环似乎只包含检索cookie的单行...所以你设置下面的cookie的逻辑只被调用一次,无论最后一个cookie是什么。由于cookie没有在列表中排序,这可能解释了为什么有时它可以工作,有时它不会;当你的cookie是最后一个时它正在工作,否则失败。

答案是扩展你的for循环以包含下面的所有逻辑。你的复制代码看起来很好,我希望有时你可以让它工作。