Android的cookie的接收和發送
阿新 • • 發佈:2017-05-13
span .com 關閉 mod 接收 一切都 數據 ati 有效
我在做自動登錄的時候遇到的坑,特寫此文以提醒各位不要把自己繞進去了。
我們都知道在web端的cookie是可以通過服務器端設置保存的,默認是關閉瀏覽器就清除cookie的,但是可以在服務器端設置cookie的有效期,瀏覽器就會自動保存cookie,而在Android上是不會自動保存cookie,我用的是Okhttp3,我找不到response.addCookie(cookie)和request.getCookies()的方法(Java web的操作),如果沒有保存和重發cookie給服務器的話,是不會自動登錄的。搞了大半天才知道這一切都在head裏。
如果是Okhttp3的話是這樣的
在日誌輸出的cookie
通過這樣的方法我們已經拿到了cookie,接下來就是保存cookie了,寫以下的靜態方法來將cookie保存到SharedPreferces,我的設計思想是盡量少操作數據庫。
1 public static final String ISLOGINED = "islogined"; 2 public static final String COOKIE = "cookie"; 3 4 5 public static void saveCookiePreference(Context context, String value) { 6 SharedPreferences preference = context.getSharedPreferences(ISLOGINED, Context.MODE_PRIVATE);7 SharedPreferences.Editor editor = preference.edit(); 8 editor.putString(COOKIE, value); 9 editor.apply(); 10 11 }
然後調用該方法保存cookie
然後再寫一個方法來在SharedPreferces獲取cookie的值
public static String getCookiePreference(Context context) { SharedPreferences preference = context.getSharedPreferences(ISLOGINED, Context.MODE_PRIVATE); String s= preference.getString(COOKIE, ""); return s; }
最後要做的是在每次的請求時帶上cookie,這cookie是放在head裏。
這樣就可以實現自動登錄了。
Android的cookie的接收和發送