android中Webview设置多个cookie参数

本文介绍了一种正确设置Cookie参数的方法,特别是如何分别设置token和渠道号等参数,并确保每个参数都具有自己的domain和path属性。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

有时候需要在cookie中设置多个参数传递给前端页面,常用的是 token和渠道号 。将N个参数的key-value按照分号分开然后一次设置,一直只使用token第一个参数,可以正常获取,所以没问题,比如


StringBuilder sbCookie = new StringBuilder();
            if (MyApplication.isLogined()) {
                UserBean userinfo = MyApplication.getUserBean();
                if(userinfo != null && !TextUtils.isEmpty(userinfo.getToken())){
                    sbCookie.append(String.format("token" + "=%s",userinfo.getToken()));
                    sbCookie.append(String.format(";from" + "=%s", "android"));
                }
            } else {
                sbCookie.append(String.format("from" + "=%s", "android"));
            }

            //webview在使用cookie前会前判断保存cookie的domain和当前要请求的domain是否相同,相同才会发送cookie
            sbCookie.append(String.format(";domain=%s",aURL.getHost())); //注意,是getHost(),不是getAuthority(),
            sbCookie.append(String.format(";path=%s","/"));

            String cookieValue = sbCookie.toString();
            cookieManager.setCookie(currentUrl, cookieValue);
            CookieSyncManager.getInstance().sync();

最近有需求获取渠道号,发现怎么也获取不到,当把渠道号放在TOKEN的顺序之前的时候,token又获取不到。后来查询一番终于知道正确的姿势应该是每个参数单独设定,如下

StringBuilder sbCookie = new StringBuilder();
            sbCookie.append(String.format("from" + "=%s", "android"));
            sbCookie.append(String.format(";domain=%s",aURL.getHost())); 
            sbCookie.append(String.format(";path=%s","/"));
            cookieManager.setCookie(currentUrl, sbCookie.toString());

            if (MyApplication.isLogined()) {
                UserBean userinfo = MyApplication.getUserBean();
                if(userinfo != null && !TextUtils.isEmpty(userinfo.getToken())){
                    StringBuilder sbCookieToken = new StringBuilder();
                    sbCookieToken.append(String.format("token" + "=%s",userinfo.getToken()));
                    //webview在使用cookie前会前判断保存cookie的domain和当前要请求的domain是否相同,相同才会发送cookie
                    sbCookieToken.append(String.format(";domain=%s",aURL.getHost())); //注意,是getHost(),不是getAuthority(),
                    sbCookieToken.append(String.format(";path=%s","/"));
                    cookieManager.setCookie(currentUrl, sbCookieToken.toString());
                }
            }
            CookieSyncManager.getInstance().sync();
            String newCookie = cookieManager.getCookie(currentUrl);

每一次setCookie操作,都是设置一组对应的cookie,每组cookie都有domain、path这些属性,用“;”来分割开 ,只写了这两个固定属性,多个属性如此以此类推即可。有点坑啊~

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值