ndroid webview里设置cookie

来源:互联网 发布:windows备份软件 编辑:程序博客网 时间:2024/05/14 04:53
我们在android中访问网络经常会用到Apache的HttpClient,用此类去访问网络获取数据, 

但是在写android界面的时候又时不时的会用到一些WebView组件,这时候访问一个以经登录的页面的时候cookie设置就有个问题 

在HttpClient中保存下来的Cookie怎么设置到WebView组件里,让WebView也保持住Cookie状态,也就是登录状态呢? 

CookieSyncManager和CookieManager就是做这种事的,下面来看代码里怎么设置Cookie让WebView也保持登录状态: 

Java代码  收藏代码
  1. /** 
  2.  * 同步一下cookie 
  3.  */  
  4. public static void synCookies(Context context, String url) {  
  5.     CookieSyncManager.createInstance(context);  
  6.     CookieManager cookieManager = CookieManager.getInstance();  
  7.     cookieManager.setAcceptCookie(true);  
  8.     cookieManager.removeSessionCookie();//移除  
  9.     cookieManager.setCookie(url, cookies);//cookies是在HttpClient中获得的cookie  
  10.     CookieSyncManager.getInstance().sync();  
  11. }  

在android里面在调用webView.loadUrl(url)之前一句调用此方法就可以给WebView设置Cookie 

注:这里一定要注意一点,在调用设置Cookie之后不能再设置
Java代码  收藏代码
  1. webView.getSettings().setBuiltInZoomControls(true);  
  2. webView.getSettings().setJavaScriptEnabled(true);  

这类属性,否则设置Cookie无效。

转自:http://blog.csdn.net/encienqi/article/details/7912733

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Re:回 3楼(MUNTO_AKIRA) 的帖子
引用 
引用第4楼申屠鹏天于2012-03-21 17:27发表的 回 3楼(MUNTO_AKIRA) 的帖子 :
谢了,这个问题解决了。
还有个小问题不解,为什么我不能实现切换用户呢(我将用户1注销后,重新登入,用户1自动登入了,可能是第一次登入的选择了自动登入,但怎么变成不自动登入呢),

两种解决方法

1.在请求authorize接口的时候,加上forcelogin=true参数
2.在退出webview的时候清楚下cookie
CookieSyncManager.createInstance(getApplicationContext());
CookieManager.getInstance().removeAllCookie();   
转自:http://hi.baidu.com/kirahai/item/aa2fe036f9c189c92e8ec29d

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

最近被这个项目折腾死了

客户端登录---客户端九宫格---webview内容功能模块

实现思路:

登录还是调用原来的servlet进行验证

view plaincopy to clipboardprint?
  1. List<NameValuePair> myList = new ArrayList<NameValuePair>();  
  2.                  myList.add(new BasicNameValuePair("STAFFID", username));  
  3.                  myList.add(new BasicNameValuePair("PWD", password));  
  4.                  HttpParams params = new BasicHttpParams();  
  5.                  DefaultHttpClient client = new DefaultHttpClient(params);  
  6.                  HttpPost post = new HttpPost(actionURL);  
  7.                  HttpResponse response = null;  
  8.                  BasicResponseHandler myHandler = new BasicResponseHandler();  
  9.                  String endResult = null;  
  10.                  try { post.setEntity(new UrlEncodedFormEntity(myList)); }  
  11.                  catch (UnsupportedEncodingException e)  
  12.                  { e.printStackTrace(); }  
  13.                  try { response = client.execute(post); }  
  14.                  catch (ClientProtocolException e)  
  15.                  { e.printStackTrace(); }  
  16.                  catch (IOException e)  
  17.                  { e.printStackTrace(); }  
 

验证成功后保存cookie并保存到SharedPreferences

//获取cookie信息

view plaincopy to clipboardprint?
  1. List<Cookie> cookies = client.getCookieStore().getCookies();  
  2.          if (cookies.isEmpty()) {  
  3.           Log.i(TAG, "-------Cookie NONE---------");  
  4.        } else {                 
  5.          for (int i = 0; i < cookies.size(); i ) {  
  6.           //保存cookie  
  7.           cookie = cookies.get(i);  
  8.          Log.d(TAG, cookies.get(i).getName() "=" cookies.get(i).getValue() );  
  9.          if(cookies.get(i).getName().equals("loginStaffId"))  {               
  10.           //保存登录信息,下次无需登录  
  11.           String PREFS_NAME = "nma.qztc.com";  
  12.           SharedPreferences settings = v.getContext().getSharedPreferences(PREFS_NAME, 0);  
  13.           SharedPreferences.Editor editor = settings.edit();               
  14.           editor.putString("staff_id", username);  
  15.           editor.putString("pwd", password);  
  16.           editor.commit();  
  17.           return true;  
  18.          }  

 

-----------------------------------------------

将cookie信息带入到webview中,之前总是出现有时cookie读取成功有时不成功,找了半天发现将

cookieManager.removeSessionCookie();
这句去掉就好了,暂时还没有出现什么问题,由于原来的web应用是采用session验证,所以在读取cookie成功后也将session信息写入,这样就双保险了

//设置cookie信息

view plaincopy to clipboardprint?
  1. Cookie sessionCookie = OnLoginListenerImpl.cookie;  
  2.         CookieSyncManager.createInstance(this);  
  3.         CookieManager cookieManager = CookieManager.getInstance();  
  4.         if (sessionCookie != null) {  
  5.         //cookieManager.removeSessionCookie();  
  6.         cookieString = sessionCookie.getName() "=" sessionCookie.getValue() "; domain=" sessionCookie.getDomain();  
  7.         Log.d("----nma cookie-----",cookieString);  
  8.         //Log.d("----url-----",getString(getResources().getIdentifier(url,"string", getPackageName())));  
  9.         cookieManager.setCookie(getString(getResources().getIdentifier(url,"string", getPackageName())), cookieString);  
  10.         CookieSyncManager.getInstance().sync();  
  11.         }  

转自:http://blog.csdn.net/se_zhehao/article/details/6327737