精华内容
下载资源
问答
  • androidcookie

    2017-12-19 09:37:00
    CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptThirdPartyCookies(this,true); } if (NetworkUtils.isConnected(this.getContext()) ){ webSettings.setCacheMode...
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    webSettings.setAllowFileAccessFromFileURLs(true);
    webSettings.setAllowUniversalAccessFromFileURLs(true);
    }
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptThirdPartyCookies(this,true);
    }
    if (NetworkUtils.isConnected(this.getContext()) ){
    webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
    } else {
    webSettings.setCacheMode(
    WebSettings.LOAD_CACHE_ELSE_NETWORK);
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webSettings.setMixedContentMode(
    WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
    }

    转载于:https://www.cnblogs.com/wcLT/p/8063937.html

    展开全文
  • android cookie

    2013-03-21 11:05:25
    做了一个android网络应用,要求用自己实现的webview去访问web网站,并且在远程登录成功之后把cookie写入到手机,保留用作以后的自动登录。找了好多资料。发觉读取cookies倒还用的很普遍,可是通过程序写cookie却没有...

    做了一个android网络应用,要求用自己实现的webview去访问web网站,并且在远程登录成功之后把cookie写入到手机,保留用作以后的自动登录。找了好多资料。发觉读取cookies倒还用的很普遍,可是通过程序写cookie却没有太多资料。

    先来看一下如何读取cookie吧:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
     try
             {
               DefaultHttpClient httpclient = new DefaultHttpClient();
               HttpGet httpget = new HttpGet("http://www.hlovey.com");
               HttpResponse response = httpclient.execute(httpget);
               HttpEntity entity = response.getEntity();
               List<Cookie> cookies = httpclient.getCookieStore().getCookies();
               if (entity != null) {
                   entity.consumeContent();
               }
     
               if (cookies.isEmpty()) {
                 Log.i(TAG, "NONE");
              } else {
                  for (int i = 0; i < cookies.size(); i++) {             
                    Log.i(TAG,"- domain " + cookies.get(i).getDomain());
                    Log.i(TAG,"- path " + cookies.get(i).getPath());
                    Log.i(TAG,"- value " + cookies.get(i).getValue());
     Log.i(TAG,"- name " + cookies.get(i).getName());
                    Log.i(TAG,"- port " + cookies.get(i).getPorts());
                    Log.i(TAG,"- comment " + cookies.get(i).getComment());
                    Log.i(TAG,"- commenturl" + cookies.get(i).getCommentURL());
                    Log.i(TAG,"- all " + cookies.get(i).toString());
                  }
              }
               httpclient.getConnectionManager().shutdown();
     
             }catch(Exception e){
               //Todo
             }finally{
             //Todo         
             }

    通过分析com.android.browser的源码,发现android默认的browser增加cookie是在数据库中增加记录,和window 不同,win是采用一个txt文本文件的形式来存储cookie。而android是将cookie存储在数据库中。具体的介绍在《android cookie存储位置》一文中有介绍。我们都知道,android每个应用程序的存储空间都是独立的。不管使用preference还是database存储,都会在每个 /data/data/package name/下面进行存储(preference存储在/data/data/package name/shared_prefs/xxxx.xml)。前面也说到cookie是存在数据库中,那么如果采用非浏览器访问网络需要保留cookie的话我们就应该在database中建立cookies表,并且存入相应的cookies数据。仿照默认broswer的代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     /**声明一些数据库操作的常量*/
       private static SQLiteDatabase mDatabase = null;
       private static final String DATABASE_FILE = "webview.db";
       private static final String COOKIES_NAME_COL = "name";
       private static final String COOKIES_VALUE_COL = "value";
       private static final String COOKIES_DOMAIN_COL = "domain";
       private static final String COOKIES_PATH_COL = "path";
       private static final String COOKIES_EXPIRES_COL = "expires";
       private static final String COOKIES_SECURE_COL = "secure";
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
     mDatabase = LoginApiActivity.this.openOrCreateDatabase(DATABASE_FILE, 0, null);
     //创建cookie数据库
         if (mDatabase != null) {
           // cookies
           mDatabase.execSQL("CREATE TABLE IF NOT EXISTS cookies "
                   + " (_id INTEGER PRIMARY KEY, "
                   + COOKIES_NAME_COL + " TEXT, " + COOKIES_VALUE_COL
                   + " TEXT, " + COOKIES_DOMAIN_COL + " TEXT, "
                   + COOKIES_PATH_COL + " TEXT, " + COOKIES_EXPIRES_COL
                   + " INTEGER, " + COOKIES_SECURE_COL + " INTEGER" + ");");
           mDatabase.execSQL("CREATE INDEX IF NOT EXISTS cookiesIndex ON "
                   + "cookies" + " (path)");
         }
       }
     
     /*写cookie*/
       public void addCookie(Cookie cookie) {
         if (cookie.getDomain() == null || cookie.getPath() == null || cookie.getName() == null
                 || mDatabase == null) {
             return;
         }
         String mCookieLock = "asd";
         synchronized (mCookieLock) {
             ContentValues cookieVal = new ContentValues();
             cookieVal.put(COOKIES_DOMAIN_COL, cookie.getDomain());
             cookieVal.put(COOKIES_PATH_COL, cookie.getPath());
             cookieVal.put(COOKIES_NAME_COL, cookie.getName());
             cookieVal.put(COOKIES_VALUE_COL, cookie.getValue());
     
             mDatabase.insert("cookies", null, cookieVal);
     
         }
     }

    这是自己的一些心得,如果错误,请指正赐教!^_^





    原文链接:http://www.hlovey.cn/2009/09/28/android-read-and-write-cookie.html


    转载声明。下文出自:http://whao189.iteye.com/blog/1121865

    前些天因为项目需要写了一个通过网络连接去服务端拿数据的方法,但是需要让程序添加上cookie,因为之前对cookie 没有怎么研究过(包括做web 那会也没有用过或者说很少用),所以

    一时用起来不太会用。。结果百度google 了一把 发现要用cookieManager这个类,然后对这个类进行操作就行了!

    1. String getCookie(Context context){  
    2. CookieManager cookieManager = CookieManager.getInstance();  
    3. String        cookie = cookieManager.getCookie("cookie");  
    4. if(cookie != null){  
    5.     return cookie;  
    6. }else{  
    7. cookie= “XXX”;  
    8. cookieManager.setCookie("cookie", cookie);  
    9. return cookie;  
    10. }  
    11. }  


    可以看到 我们只要设置在这里面然后再使用的时候我们在自己的httpconnection中添加就行了
    1. URL  url = new URL(urlPath);  
    2. HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
    3. httpUrlConn.setRequestProperty("cookie", getCookie(context));  


    这样做 貌似是正确的。。当时我也是这么理解的。。但是很不幸的 是 。。。报错了。。

    提示createInstance() must be instance called before getinstance()

    很明显 我们必须要首先产生这个实例。。。结果查了一下API 需要在 getInstance()之前
    1. CookieSyncManager.createInstance(context);  


    这样之后就不会出错了。。createInstance 之后保证了我们的。。webkit在使用CookieManager的时候 使用的是同一个CookieManager并保证了 线程同步。。。。

    这一点我们可以参看CookieSyncManager.createInstance(context);的源码。。。。。

    展开全文
  • Android Cookie

    2012-04-12 10:17:00
    cookie domain, path, expiration time or maximum age, Secure flag and HttpOnly flag Chrome浏览器Cookie位置:/root/.config/google-chrome/Default 查看Cookie: sud...

    http://en.wikipedia.org/wiki/HTTP_cookie

    cookie domain, path, expiration time or maximum age, Secure flag and HttpOnly flag

    Chrome浏览器Cookie位置:/root/.config/google-chrome/Default

    查看Cookie:

    sudo apt-get install sqlite3

    sudo apt-get install sqlitebrowser

    Android Cookie位置:private static final String DATABASE_FILE = "webview.db";

     

    LoadListener->headers(Headers headers)

    CookieManager->setCookie(WebAddress uri, String value)

    CookieManager->parseCookie(String host, String path,String cookieString)

     

    FrameLoader->executeLoad()

    FrameLoader->handleHTTPLoad()

    FrameLoader->populateHeaders()

    String cookie = CookieManager.getInstance().getCookie(mListener.getWebAddress());
    mHeaders.put("Cookie", cookie);

     

    转载于:https://www.cnblogs.com/cornellbox/archive/2012/04/12/2443462.html

    展开全文
  • Android Cookie处理

    2016-01-26 22:23:50
    Android Cookie处理Android有两个CookieManager类,用以处理Cookie同步的问题,分别是:android.webkit.CookieManager java.net.CookieManager 1 java.net.CookieManager的使用1.1 使用HttpURLConnection处理http...

    Android Cookie处理

    Android有两个CookieManager类,用以处理Cookie同步的问题,分别是:

    android.webkit.CookieManager
    java.net.CookieManager
    

    1 java.net.CookieManager的使用

    1.1 使用HttpURLConnection处理http请求

    使用CookieManager默认的实现,在Application初始化的时候添加以下代码即可:

    CookieHandler.setDefault(new CookieManager());

    但是默认的实现往往不能满足需求,那就需要自己处理Cookie。

    自己处理Cookie的时候需要继承CookieManager类并重写两个方法:

    //发送http请求的时候 获取需要的请求头(head)信息
    public Map<String, List<String>> get(URI uri, Map<String, List<String>> requestHeaders)
    
    //获取的http响应头信息 用于提取所需要的Cookie信息
    public void put(URI uri, Map<String, List<String>> responseHeaders)
    

    例如下面是我在自己项目里处理Cookie的类,处理的原则是

    • 如果http请求涉及多个域,则每个域只带自己的Cookie信息
    • 如果同域多个请求返回不同的Cookie属性,则下次请求需要带上之前获取的所有同域的Cookie属性
    • 忽略掉一些无用的属性

    代码如下所示:

    public class MyCookieManager extends CookieManager {
    
    private HashMap<String, HashMap<String, String>> mCookieMap = new HashMap<>(3);
    private static String[] COOKIE_SKIP_KEY = {"domain", "path", "expires", "max-age", "discard"};//请求头的Cookie里不需要的属性
    
    public MyCookieManager() {
        super(null, CookiePolicy.ACCEPT_ALL);
    }
    
    @Override
    public Map<String, List<String>> get(URI uri, Map<String, List<String>> requestHeaders) throws IOException {
        HashMap<String, List<String>> headMap = new HashMap<>();
        headMap.putAll(requestHeaders);
        headMap.put("Cookie", Arrays.asList(getCookieStr(uri)));
        return headMap;
    }
    
    @Override
    public void put(URI uri, Map<String, List<String>> responseHeaders) throws IOException {
        List<String> setCookies = responseHeaders.get("Set-Cookie");
        if (setCookies == null) {
            return;
        }
        String host = uri.getHost();
        HashMap<String, String> cookieMap = mCookieMap.get(host);
        if (cookieMap == null) {
            cookieMap = new HashMap<>(5);
        }
        for (String str : setCookies) {
            String[] attrs = str.split(";");
            for (String attr : attrs) {
                if (attr.contains("=")) {
                    String[] kv = attr.split("=");
                    if (!isSkip(kv[0])) {
                        cookieMap.put(kv[0], kv[1]);
                    }
                }
            }
        }
        mCookieMap.put(host, cookieMap);
    }
    
    private boolean isSkip(String key) {
        for (int i = 0; i < COOKIE_SKIP_KEY.length; i++) {
            if (COOKIE_SKIP_KEY[i].equals(key.toLowerCase().trim())) {
                return true;
            }
        }
        return false;
    }
    
    public String getCookieStr(URI uri) {
        String cookieStr = "";
        HashMap<String, String> cookieMap = mCookieMap.get(uri.getHost());
        if (cookieMap != null) {
            Iterator<Map.Entry<String, String>> it = cookieMap.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<String, String> entry = it.next();
                cookieStr += entry.getKey() + "=" + entry.getValue() + ";";
            }
        }
        return cookieStr;
    }
    

    然后在Application的onCreate里添加以下代码即可:

    CookieHandler.setDefault(new MyCookieManager());
    

    1.2 使用OkHttp处理Http请求

    在一些http框架里,继承CookieManager处理Cookie的方式并不是总能生效。

    当然成熟点的框架都会提供类似的接口方便开发者处理,android里最流行的框架OkHttp当然也提供了处理Cookie的方式。

    在OkHttp2.x的版本里,可以用以下方式处理Cookie:

    OkHttpClient client = new OkHttpClient();
    client.setCookieHandler(new CookieManager());
    

    在OkHttp3.x的版本里,摈弃了setCookieHandler()方法,取代的是cookieJar(CookieJar cookieJar)方法,并提供了CookieJar接口。

    CookieJar的使用类似CookieMananger,同样提供两个方法:

    //获取的http响应的Cookie信息
    public void saveFromResponse(HttpUrl url, List<Cookie> cookies)
    
    //发送http请求的时候 获取需要的Cookie信息
    public List<Cookie> loadForRequest(HttpUrl url)
    

    如果之前MyCookieManger的处理方式需要移植到OkHttp,则代码修改如下:

    public class HttpCookieManager implements CookieJar {
    
    private HashMap<String, HashMap<String, String>> mCookieMap = new HashMap<>(3);
    private static String[] COOKIE_SKIP_KEY = {"domain", "path", "expires", "max-age", "discard"};
    
    private HttpCookieManager() {}
    private static HttpCookieManager instance = new HttpCookieManager();
    
    public static HttpCookieManager getInstance() {
        return instance;
    }
    
    @Override
    public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
        if (cookies == null) {
            return;
        }
        String host = url.host();
        HashMap<String, String> cookieMap = mCookieMap.get(host);
        if (cookieMap == null) {
            cookieMap = new HashMap<>(5);
        }
        for (Cookie cookie : cookies) {
            String str = cookie.toString();
            String[] attrs = str.split(";");
            for (String attr : attrs) {
                if (attr.contains("=")) {
                    String[] kv = attr.split("=");
                    if (!isSkip(kv[0])) {
                        cookieMap.put(kv[0], kv[1]);
                    }
                }
            }
        }
        mCookieMap.put(host, cookieMap);
    }
    
    @Override
    public List<Cookie> loadForRequest(HttpUrl url) {
        List<Cookie> list = new ArrayList<>(1);
        list.add(new Cookie.Builder().name("Cookie").value(getCookieStr(url.uri())).domain(url.host()).build());
        return Collections.emptyList();
    }
    
    private boolean isSkip(String key) {
        for (int i = 0; i < COOKIE_SKIP_KEY.length; i++) {
            if (COOKIE_SKIP_KEY[i].equals(key.toLowerCase().trim())) {
                return true;
            }
        }
        return false;
    }
    
    public String getCookieStr(URI uri) {
        String cookieStr = "";
        HashMap<String, String> cookieMap = mCookieMap.get(uri.getHost());
        if (cookieMap != null) {
            Iterator<Map.Entry<String, String>> it = cookieMap.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<String, String> entry = it.next();
                cookieStr += entry.getKey() + "=" + entry.getValue() + ";";
            }
        }
        return cookieStr;
    }
    }
    

    然后OkHttp的初始化如下所示:

    private OkHttpClient client = new OkHttpClient();
    client = client.newBuilder().cookieJar(HttpCookieManager.getInstance()).build();
    

    一般情况下,在OkHttp3.x里这样处理就可以了,但是在有302跳转的时候,如果跳转后的请求也需要同样的Cookie处理规则,那么跳转后的请求是调不到CookieJar的loadForRequest方法的。

    这时候就需要用到OkHttp的Interceptor,实现Interceptor接口如下:

    class CookieInterceptor implements Interceptor {
        @Override
        public Response intercept(Interceptor.Chain chain) throws IOException {
            Request request = chain.request();
            //处理Cookie 这里处理主要是为302重定向的请求添加Cookie
            String cookieStr = HttpCookieManager.getInstance().getCookieStr(request.url().uri());
            request = request.newBuilder().addHeader("Cookie", cookieStr).build();
            return chain.proceed(request);
        }
    }
    

    屏蔽CookieJar里loadForRequest方法的处理:

    public List<Cookie> loadForRequest(HttpUrl url) {
        return Collections.emptyList();
    }
    

    OkHttp初始化如下:

     client = client.newBuilder()
        .addNetworkInterceptor(new CookieInterceptor())
        .cookieJar(HttpCookieManager.getInstance()).build();
    

    2 android.webkit.CookieManager的使用

        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(accept);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
          cookieManager.setAcceptThirdPartyCookies(webView, true);
        }
        MyCookieManager myCookieManager = (MyCookieManager) CookieHandler.getDefault();
        //HttpCookieManager.getInstance().getCookieStr(request.url().uri());
        cookieManager.setCookie(urlStr, myCookieManager.getCookieStr(new URI(url)));
         CookieSyncManager.getInstance().sync();
    
    展开全文
  • Android Cookie 深度理解

    2015-08-15 18:19:02
    Android每次请求网络都会出现Cookie,方便登录,修改等操作,cookie的作用很大的!
  • android cookie 使用

    2018-12-16 23:24:25
    其实上面这篇已经写的非常清楚了。 简单总结就是,在第第一次请求的时候,比如登录。服务器返回的数据报文的 响应头里面会包含...Set-Cookie:xxxx;aa=bb;cc=dd Set-Cookie:yyyy;mq=qw;kk=zx 这样的数据。然后下次请...
  • httpClient请求和服务器session保持同步,webView对cookie的管理 httpClient请求和服务器session保持同步,webView对cookie的管理
  • android Cookie保存到database是异步实现的。 CookieSyncManager继承 WebSyncManager, 是负 责cookie从内存到持久存储的 类,cookie 的同步可以分为自动同步和强制同步两种. 1. 自动同步 ...
  • <div><p>I added functionality to implement the Android CookieManager to automatically share cookies from the HTTPClient with the WebView in Android, so XHR and WebViews could share sessions....
  • Android下的cookie的获取与保存的Demo
  • android cookie持久化

    2015-08-26 14:57:20
    在解析网页信息的时候,需要登录后才能访问,所以使用httpclient模拟登录,然后把cookie保存下来,以供下一次访问使用,这时就需要持久化cookie中的内容。 在之前先科普一下基础知识: 什么是Cookies? ...
  • React Native Android Cookie Problem

    千次阅读 2015-11-04 13:55:08
    背景 最近使用react native 来写一个公司内部使用的app,使用fetch去登陆,发现在android平台上无法获取cookie,iOS平台上却可以。即使是response.headers.get()也获得不了相关信息。于是上网google并且阅读源码,...
  • <div><p>There currently exists a gap in functionality with Android as opposed to iOS where iOS will actively share cookies with any inappbrowser webviews, but Android does not. This simply adds in a ...
  • androidcookie存储sqllite

    2018-03-28 16:02:00
     if (cookie.getDomain() == null || cookie.getPath() == null || cookie.getName() == null  || mDatabase == null) {  return;  }  String mCookieLock = "asd";  synchronized (mCookieLock) {  ...
  • 通常流媒体行业都有专门的CMS管理服务器与流分发服务器,而客户端在CMS认证成功后,再向流媒体服务器请求时,还要再去认证一遍,为此我们将详细介绍Android cookieManager & OKHttp以及EasyPlayerPro的媒体流的...
  • <ol><li>Create a new Xamarin Forms/Android Project.</li><li>In the MainActivity OnCreate, create a cookie by setting the value for samesite as "samesite=lax".</li><li>Add the cookie to the...
  • Android CookieManager.setCookie 失败

    千次阅读 2018-06-11 15:58:25
    项目中后台突然发现APP上送的header中cookie一直为null。打断点发现cookieManager.setCookie("key", vaule)后,值并没有成功写入。 发现cookie中的值由原来的“JSESSIONID=XXXXXXXX"改为了"...
  • android cookie 怎么设置有效期

    千次阅读 2017-05-26 11:25:16
    //设置cookie CookieManager.getInstance().setCookie("url","name=value"); if(Build.VERSION.SDK_INT&gt;=LOLLIPOP)//大于21的版本需要刷新数据 { CookieManager.getInstance().flush...
  • android cookie 获取不到

    千次阅读 2012-06-19 23:05:41
    android 在模拟器器上可以 正常获取到cookie 在手机上不能正确获取 cookie 为空 找了好长时间 最终发现事 手机上时间时区不对 调整到北京8:00后 是明天的时间 ,怪不得获取不到cookie cookie 已过期
  • android CookieManager 用法

    2014-04-23 17:01:26
    http://blog.csdn.net/woyaowenzi/article/details/7315033

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,430
精华内容 972
关键字:

androidcookie