android webview设置cookie

开发中使用webview加载url时,需要带上原生登录的用户信息,所以考虑往cookie中写入,写入cookie的代码如下:

        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        cookieManager.removeSessionCookie();
        cookieManager.removeAllCookie();

        cookieManager.setCookie(url, "userID=" + userID);
        cookieManager.setCookie(url, "userIDSign=" + userSign);
        cookieManager.setCookie(url, "deviceID=" + deviceID);
        cookieManager.setCookie(url, "deviceSign=" + deviceIDsign);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.flush();
        } else {
            CookieSyncManager.getInstance().sync();
        }

这里需要注意一个几个点
1.每次调用setCookie都是增加一个新的cookie,并不会覆盖之前的cookie
2.如上图所示,如果写成这样

cookieManager.setCookie(url, "userID=" + userID
                + ";userIDSign=" + userSign
                + ";deviceID=" + deviceID
                + ";deviceSign=" + deviceIDsign);

这种写法前端页面可能只会读到第一个键-值对,这里需要注意

  1. 但是如果cookie的key为“SESSION”,在后面追加domain和path,这样写是没有问题的,代码如下:
 cookieManager.setCookie(mUrl, "SESSION=" + session
                    + ";Domain=xx.xxxxxx.com"
                    + ";Path=/");

该规则或许只适用于“SESSION”或者Domain以及Path,如果使用别的自定义key可能无法读取分号后面的其他键值对,
该问题后续需要验证一下,这里只说现象

另外如果不是在app启动时就携带信息,可以使用调用js传参的方式来传递关键信息,比如下面的方式:

 webView.loadUrl("javascript:loginSuccess('" + json + "')");

本文章主要是针对此问题记录一下,也希望能帮助小伙伴们少踩坑

你可能感兴趣的:(android webview设置cookie)