我在做自動登錄的時候遇到的坑,特寫此文以提醒各位不要把自己繞進去了。

我們都知道在web端的cookie是可以通過服務器端設置保存的,默認是關閉瀏覽器就清除cookie的,但是可以在服務器端設置cookie的有效期,瀏覽器就會自動保存cookie,而在Android上是不會自動保存cookie,我用的是Okhttp3,我找不到response.addCookie(cookie)和request.getCookies()的方法(Java web的操作),如果沒有保存和重發cookie給服務器的話,是不會自動登錄的。搞了大半天才知道這一切都在head裏。

如果是Okhttp3的話是這樣的

在日誌輸出的cookie

通過這樣的方法我們已經拿到了cookie,接下來就是保存cookie了,寫以下的靜態方法來將cookie保存到SharedPreferces,我的設計思想是儘量少操作數據庫。

public static final String ISLOGINED = "islogined";
public static final String COOKIE = "cookie";

 public static void saveCookiePreference(Context context, String value) {
    SharedPreferences preference = context.getSharedPreferences(ISLOGINED, Context.MODE_PRIVATE);
     SharedPreferences.Editor editor = preference.edit();
     editor.putString(COOKIE, value);
     editor.apply();
}

然後調用該方法保存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裏。

這樣就可以實現自動登錄了。

小夜