• android 给url添加cookie


     前些天因为项目需要写了一个通过网络连接去服务端拿数据的方法,但是需要让程序添加上cookie,因为之前对cookie 没有怎么研究过(包括做web 那会也没有用过或者说很少用),所以 
    
    一时用起来不太会用。。结果百度google 了一把 发现要用cookieManager这个类,然后对这个类进行操作就行了!
    
    Java代码  收藏代码
    
        String getCookie(Context context){  
        CookieManager cookieManager = CookieManager.getInstance();  
        String        cookie = cookieManager.getCookie("cookie");  
        if(cookie != null){  
            return cookie;  
        }else{  
        cookie= “XXX”;  
        cookieManager.setCookie("cookie", cookie);  
        return cookie;  
        }  
        }  
    
    
    
    可以看到 我们只要设置在这里面然后再使用的时候我们在自己的httpconnection中添加就行了 
    
    Java代码  收藏代码
    
        URL  url = new URL(urlPath);  
        HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
        httpUrlConn.setRequestProperty("cookie", getCookie(context));  
    
    
    
    这样做 貌似是正确的。。当时我也是这么理解的。。但是很不幸的 是 。。。报错了。。 
    
    提示createInstance() must be instance called before getinstance() 
    
    很明显 我们必须要首先产生这个实例。。。结果查了一下API 需要在 getInstance()之前先 
    Java代码  收藏代码
    
        CookieSyncManager.createInstance(context);  
    
    
    
    这样之后就不会出错了。。createInstance 之后保证了我们的。。webkit在使用CookieManager的时候 使用的是同一个CookieManager并保证了 线程同步。。。。 
    
    这一点我们可以参看CookieSyncManager.createInstance(context);的源码。。。。。 
     在Android应用程序中经常会加载一个WebView页,如果需要客户端向WebView传递信息,比如Cookie,也是可以的。
    
    需要应用程序先将Cookie注入进去,打开该网页时,WebView会将加载的url通过http请求传输到服务器。同时,在这次请求中,会将Cookie信息通过http header传递过去。
    
        流程如下:
    
        1、客户端通过以下代码设置cookie
    1
    2
    3
    4
    5
    6
        
    public static void synCookies(Context context, String url) {  
            CookieSyncManager.createInstance(context);  
            CookieManager cookieManager = CookieManager.getInstance();  
            cookieManager.setCookie(url, "uid=1243432");              
            CookieSyncManager.getInstance().sync();  
        }
    
       2、CookieManager会将这个Cookie存入该应用程序/data/data/databases/目录下的webviewCookiesChromium.db数据库的cookies表中
    
       3、打开网页,WebView从数据库中读取该cookie值,放到http请求的头部,传递到服务器
    
       4、客户端可以在注销登录时清除该应用程序用到的所有cookies
    1
    2
    3
    4
    5
    6
        
    private void removeCookie(Context context) {
            CookieSyncManager.createInstance(context);  
            CookieManager cookieManager = CookieManager.getInstance(); 
            cookieManager.removeAllCookie();
            CookieSyncManager.getInstance().sync();  
        }
  • 相关阅读:
    Saiku相关异常处理(十五)
    Saiku登录源码追踪.(十三)
    Saiku调用WS接口(十四)
    Saiku本地编译运行后Debug调试(十二)
    Windows查看Java内存使用情况
    Saiku免登录嵌入其他系统使用(十一)
    Saiku更改源代码实现默认查询一天的数据(十)
    Saiku关于MDX过滤的使用-默认显示最近一周的数据(九)
    Saiku部分函数解析(八)
    Saiku缓存处理(七)
  • 原文地址:https://www.cnblogs.com/yaowen/p/5478074.html
Copyright © 2020-2023  润新知