編輯:Android開發教程
Cookie管理是大家在做安卓app中難以避免的問題。我在此發表一些拙見。
先看看cookie可能存放的位置
1.Httpclient會存儲當次請求的cookie內容,存儲位置在 httpClient.getCookieStore 但是apache建議自定義cookie存儲方式,因為cookiestore把cookie放在arraylist裡很容易被系統回收[1]。
2.WebView會存儲cookie在CookieManager,具體使用方式,後續的文章會講這裡不是重點。
正常HttpClient中得Cookie是不能與WebView中得Cookie共享的所以這裡需要一個中間變量(這裡叫做CookieMap)來管理Cookie。每次請求的時候都要刷新CookieMap,我推薦的Cookie管理方式是只增加、修改不刪除。每次請求完成都要進行一次Cookie同步,有的app要求保持登陸狀態,所以也有必要把cookie放入Preference。
List<Cookie> cookieList = httpClient.getCookieStore().getCookies(); if (context == null || cookieList == null || cookieList.size() == 0) { return; } SharedPreferences preferences = context.getSharedPreferences(Constant.HTTPHEAD, Context.MODE_PRIVATE); Editor edit = preferences.edit(); for (Cookie cookie : cookieList) { edit.putString(cookie.getName(), cookie.getValue()); httpCookiesMap.put(cookie.getName(), cookie); } edit.commit();
查看本欄目更多精彩內容:http://www.bianceng.cn/OS/extra/
在請求之前,如果要自己在header中setcookie的話那麼就不要保留httpclient中的cookie否則容易造成給服務器提交的request的header中包含兩個cookie的情況,有的會造成服務器混亂。
// 由於自行處理cookie所以要清理client管理的cookie否則容易出現兩個cookie頭的情況
httpClient.getCookieStore().clear();
String strHeader =getCookiesForHttpHeader(context);
request.setHeader(Constant.COOKIE, strHeader);
HttpResponse response = httpClient.execute(request);
偶爾會碰到api和webview所做的請求在不同域的情況,那麼就要求重新設置cookie的域和path,這裡鼓勵把path范圍設置的大一些否則有些請求比如(ajax,jsonp)可能得不到cookie。
cookieManager.setCookie(url, key + "=" + cookie.getValue() + ";domain=" + "xxxx.com"+";path=/");
下面是當Logout的時候需要做得cookie清理工作,如果使用cookie來判斷是否登錄的話,則只清理本地cookiemap和Preference中得cookie是不夠的。還需要清理掉webview中的對應的cookie。否則下次登陸依然是登陸狀態。
// 清理內存cookie httpCookiesMap.clear(); // 清理httpclientcookie httpClient.getCookieStore().clear(); // 清理掉WebViewCookie CookieManager.getInstance().removeAllCookie(); CookieSyncManager.getInstance().sync(); // 清理preferencecookie相關的項目 SharedPreferences preferences = context.getSharedPreferences(Constant.HTTPHEAD, Context.MODE_PRIVATE); Editor editor = preferences.edit(); editor.remove(Constant.ACCOUNT); editor.remove(Constant.NICKNAME); editor.remove(Constant.PHPSESSID); editor.commit();
希望這篇文章對大家的工作有所幫助。接下來會寫一篇關於httpclient配置的文章。
作者:cnblogs Sharp陳響
Android中,View的Listener方法,在是否使用匿名類匿名對象時,有各種不 同的寫法。OnClickListener和其他Listener方法一樣,都是Vie
通過roster可以獲得好友列表,前提是在服務器中建立了好友列表,不然沒有的話,不會獲取全部用戶的,roster.getEntries()的size將會為0。下面來看看怎
盡管以前你也可以將一個網頁放到Android主屏直接啟動,但Chrome V31 beta for Android加到主屏的功能稍微有點改進,就是通過快捷方式進入的網頁是
Activity是Android應用用戶界面的基本組成部件。但Activity本身並不提供用戶界面(User Interface)。從程序結構層次上 來說,一個Andro