WebView设置cookie简述与代码实现

概述

本文主要说明内容如下:

  1. Cookie值的格式
  2. Android端WebView如何设置针对特定域名的网址设置cookie值。

Cookie值格式

Cookie是一段小型文本,主要包含一组name-value值和一些公共的可选属性组成,其中可选属性主要包含如下几项:

  1. Expires属性:设置Cookie的生存周期,该变量可以缺省,当该变量缺省时表示此cookie仅存在在内存中,cookie文件会随着浏览器的关闭而自动消失。
  2. Path属性:定义了Web Url中采用此Cookie的目录,如果此项值为"/",则表示该域名下的Web服务器均可以访问此cookie文件。
  3. Domain属性:指定了可以访问此Cookie的Web域名。
  4. Secure属性:指定是否以Https安全协议发送cookie。
    由此可以看出通过设置Path和Domain可以设置访问cookie网址的有效范围。

设置单个Cookie值

设置cookie主要包含如下几个步骤:

  1. 设置具体的cookie值和属性
  2. 判断域名和path,只有对有效的网址才设置cookie
  3. 设置cookie

设置Cookie字符串

Cookie字符串可以设置为如下格式,主要设置内容包含主要的name-value之外,还有上述的属性:

key=value;domain=.xxx.com;path=/

判断域名和path

获取域名代码示例

    private fun getDomain(url: String): String {
        var domain = ""
        if (!TextUtils.isEmpty(url) && url.startsWith("http")) {
            try {
                val host = Uri.parse(url).host
                if (!TextUtils.isEmpty(host) && host!!.contains(".")) {
                    domain = host.substring(host.indexOf("."), host.length)
                }
            } catch (ex: Exception) {
            }
        }
        return domain
    }

设置cookie

设置cookie代码示例

    private fun setCookie(cookie: String, url: String) {
    //设置具体的cookie字符串
        if (isDomainTruckerPath(url)) {
            var cookieString = cookie + "; domain=" + getDomain(url) + "; path=" + "/"
            cookieManager.setAcceptCookie(true)
            cookieManager.setCookie(url, cookieString)
        }
        //同步cookie,21版本之前不许手动同步,21后可以省略flush()
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.removeSessionCookies(null)
            cookieManager.flush()
        } else {
            cookieManager.removeSessionCookie()
            CookieSyncManager.getInstance().sync()
        }
    }

注意事项

  1. Cookie设置必须放在WevSettings设置和webView.loadUrl()方法之前;
  2. 当Cookie包含了多个键值对信息时,需要多次调用setCookie方法,不能够直接通过直接拼接字符串实现
  3. API 21版本之前必须手动同步cookie,因此可以采用版本判断。
  4. 客户端可以在注销登录时清除该应用程序用到的所有cookies,避免切换账号等操作情景产生缓存问题。如果采用在展示Web的Activity中设置Cookie的方式,需在onDestroy方法中清除Cookie,如下:
cookieManager.removeAllCookie()

备注

此文由本人在网上查询资料后的学习总结,如有错误,欢迎指正。

你可能感兴趣的:(WebView设置cookie简述与代码实现)