Android的cookie的接收和发送
我在做自动登录的时候遇到的坑,特写此文以提醒各位不要把自己绕进去了。
我们都知道在 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 里。
这样就可以实现自动登录了。