我在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", "============================ ");
}
}
答案 0 :(得分:1)
你的for循环似乎只包含检索cookie的单行...所以你设置下面的cookie的逻辑只被调用一次,无论最后一个cookie是什么。由于cookie没有在列表中排序,这可能解释了为什么有时它可以工作,有时它不会;当你的cookie是最后一个时它正在工作,否则失败。
答案是扩展你的for循环以包含下面的所有逻辑。你的复制代码看起来很好,我希望有时你可以让它工作。