1. 程式人生 > >Android的cookie的接收和發送

Android的cookie的接收和發送

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的接收和發送