美文网首页
WebView设置cookie简述与代码实现

WebView设置cookie简述与代码实现

作者: 静水红阳 | 来源:发表于2019-10-28 14:53 被阅读0次

    概述

    本文主要说明内容如下:

    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简述与代码实现

          本文链接:https://www.haomeiwen.com/subject/xirbvctx.html