Android的cookie的接收和发送

  |   0 评论   |   0 浏览   |   夜雨飘零

我在做自动登录的时候遇到的坑,特写此文以提醒各位不要把自己绕进去了。

我们都知道在 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 里。

这样就可以实现自动登录了。


标题:Android的cookie的接收和发送
作者:夜雨飘零
地址:https://blog.doiduoyi.com/articles/1584871123099.html

评论

发表评论