OkHttpUtils保证同一个cookie

OkHttpUtils默认每次访问网址都会改变cookie值,导致后台很难做到安全的校验。在BaseApplication设计如下值就可以了。

/*HTTPS访问初始化设置*/

    /*HTTPS访问初始化设置*/
    private void initOkHttp() {
        final HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();
        HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(10000L, TimeUnit.MILLISECONDS)
                .readTimeout(10000L, TimeUnit.MILLISECONDS)
                .cookieJar(new CookieJar() {//保留session唯一性
                    @Override
                    public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
                        Logs.v("保存的cookies:" + cookies+" url:"+url);
                        cookieStore.put(url, cookies);
                    }

                    @Override
                    public List<Cookie> loadForRequest(HttpUrl url) {
                        List<Cookie> cookies = cookieStore.get(url);
                        Logs.v("请求的cookies:" + cookies+" url:"+url);
                        return cookies != null ? cookies : new ArrayList<Cookie>();
                    }
                })
                .addInterceptor(new LoggerInterceptor("TAG"))
                .hostnameVerifier(new HostnameVerifier() {
                    @Override
                    public boolean verify(String hostname, SSLSession session) {
                        return true;
                    }
                })
                .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)//保证能访问HTTPS
                .build();
        OkHttpUtils.initClient(okHttpClient);
    }



一.URL与cookie一一对应

以上代码能保证你每次访问同一个URL传给服务器的请求Cookie和服务器第一次返回的相同,从而提高了安全性。

二.保证访问同一个服务器所有URL的cookie相同

就是修改下上面的代码就可以

这里主要是保留服务器的host地址,将URL的host设置为key,而不是URL

final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
        .cookieJar(new CookieJar() {//保留session唯一性
                    @Override
                    public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
 Logs.v("保存的cookies:" + cookies + " url:" + url + " " + cookieStore.get(url.host()));
                        if (cookieStore.get(url.host()) == null) {
                            cookieStore.put(url.host(), cookies);
                        }
                    }

                    @Override
                    public List<Cookie> loadForRequest(HttpUrl url) {
                        List<Cookie> cookies = cookieStore.get(url.host());
Logs.v("请求的cookies:" + cookies + " url:" + url + "  \nhost:" + url.host());
                        return cookies != null ? cookies : new ArrayList<Cookie>();
                    }
                })

三.扩展

cookie和session的区别和用法

https://www.jianshu.com/p/53e8e0eb36b8?from=singlemessage

修改成自带的cookie持久化

https://www.cnblogs.com/whycxb/p/7146572.html?tdsourcetag=s_pcqq_aiomsg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值