精华内容
下载资源
问答
  • Android的cookie的接收和发送

    千次阅读 2017-05-13 11:13:41
    我们都知道在web端的cookie是可以通过服务器端设置保存的,默认是关闭浏览器就清除cookie的,但是可以在服务器端设置cookie的有效期,浏览器就会自动保存cookie,而在Android上是不会自动保存cookie,我用的是Okhttp...

    原文博客:Doi技术团队
    链接地址:https://blog.doiduoyi.com/authors/1584446358138
    初心:记录优秀的Doi技术团队学习经历

    我在做自动登录的时候遇到的坑,特写此文以提醒各位不要把自己绕进去了。

    我们都知道在web端的cookie是可以通过服务器端设置保存的,默认是关闭浏览器就清除cookie的,但是可以在服务器端设置cookie的有效期,浏览器就会自动保存cookie,而在Android上是不会自动保存cookie,我用的是Okhttp3,我找不到response.addCookie(cookie)和request.getCookies()的方法(Java web的操作),如果没有保存和重发cookie给服务器的话,是不会自动登录的。搞了大半天才知道这一切都在head里。

    如果是Okhttp3的话是这样的

    在日志输出的cookie

    通过这样的方法我们已经拿到了cookie,接下来就是保存cookie了,写以下的静态方法来将cookie保存到SharedPreferces,我的设计思想是尽量少操作数据库。

    public static final String ISLOGINED = "islogined";
    public static final String COOKIE = "cookie";
      
     public static void saveCookiePreference(Context context, String value) {
        SharedPreferences preference = context.getSharedPreferences(ISLOGINED, Context.MODE_PRIVATE);
         SharedPreferences.Editor editor = preference.edit();
         editor.putString(COOKIE, value);
         editor.apply();
    }

    然后调用该方法保存cookie

    然后再写一个方法来在SharedPreferces获取cookie的值

    public static String getCookiePreference(Context context) {
        SharedPreferences preference = context.getSharedPreferences(ISLOGINED, Context.MODE_PRIVATE);
        String s = preference.getString(COOKIE, "");
        return s;
    }

    最后要做的是在每次的请求时带上cookie,这cookie是放在head里。

    这样就可以实现自动登录了。

    展开全文
  • 记一次android的cookie使用历程

    千次阅读 2015-04-30 14:34:26
    Cookie简介:摘自维基百科 Cookie(复数形态Cookies),中文名称为小型文本文件或小甜饼[1],指某些网站为了辨别用户身份而储存在用户本地...Cookie总是保存在客户端中,按在客户端中存储位置,可分为内存Cookie和硬

    Cookie简介:摘自维基百科

    Cookie(复数形态Cookies),中文名称为小型文本文件小甜饼[1],指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。定义于RFC2109。是网景公司的前雇员Lou Montulli在1993年3月的发明。

    Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。

    内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。

    因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么。 所以Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

    在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。当用户访问另一个页面,浏览器会把Cookie发送给服务器,于是服务器知道他之前选购了什么。用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。结帐时,服务器读取发送来的Cookie就行了。

    Cookie另一个典型的应用是当登录一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。如果勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登录了。这正是因为前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登录时,(如果该Cookie尚未到期)浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。


    CookieSyncManager.createInstance(getApplicationContext());
    CookieManager cookieManager = CookieManager.getInstance();
    final  String cookie=cookieManager.getCookie(url);
    cookieManager.setAcceptCookie(true);
    cookieManager.setCookie(url, cookie);
    CookieSyncManager.getInstance().sync();
    即可获取到目标url的Cookie了。当然也可以删除cookie.
    CookieManager.getInstance().removeSessionCookie(); 或CookieManager.getInstance().removeAllCookies();

    然后再携带该Cookie访问目标URL,即能获得想要的数据了,for example:

    URL url = null;
    HttpURLConnection urlConnection=null;
    InputStream inputStream=null;
    ByteArrayOutputStream outputStream=null;
    try {
        url = new URL(targetUrl);
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestProperty("Cookie",cookie);
        String header=urlConnection.getHeaderField("Set-Cookie");
        inputStream = urlConnection.getInputStream();
        outputStream = new ByteArrayOutputStream();
        byte[] data = new byte[1024];
        int len = 0;
        String result = "";
        if (inputStream != null) {
    
            while ((len = inputStream.read(data)) != -1) {
                outputStream.write(data, 0, len);
            }
            result = new String(outputStream.toByteArray(), "UTF-8");
    
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    finally {
        try {
            inputStream.close();
            outputStream.close();
            urlConnection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    展开全文
  • 我建了一个browser,用browser登陆了淘宝(非移动版的m.taobao.com)。 然后用httpUrlClient来获得...pagesize=20这个页面。 ... ...windows下用VB开发这种程序,整个进程的cookie是共享的,为什么这里就不是共享的了?
  • 主要介绍了Androidcookie的处理详解相关资料,主要介绍AndroidCookie 操作,希望通过本文能帮助到大家,需要朋友可以参考下
  • 主要介绍了android读写cookie的方法示例,小编觉得挺不错,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • android-cookie-store:用于HttpURLConnection和OkHttp的Android InMemory和持久性Cookie存储,具有易于在Android WebViews中同步cookie的扩展
  • android获取cookie

    2020-09-03 14:28:17
    最近一直在使用玩android开放API做一个项目,在收藏接口时候遇到了问题,登陆成功后在...可以看到postman帮我们报存了cookie内容,这样当我们进行收藏等操作时候就可以操作成功,但是android中不会自动将c

    最近一直在使用玩android开放的API做一个项目,在收藏接口的时候遇到了问题,登陆成功后在点击收藏还是提示未登录,然后慢慢接触到了cookie
    此项目的接口数据来源于玩Android
    思路:
    在这里插入图片描述
    使用postman模拟请求数据登录之前我们可以看到Temporary Headers中有一个Cookie字段,现在的值就是默认显示的内容
    当我们登录成功后cookie字段的内容为:
    在这里插入图片描述
    可以看到postman帮我们报存了cookie中的内容,这样当我们进行收藏等操作的时候就可以操作成功,但是android中不会自动将cookie进行报存

    直接进入主题:

    //登录
    @GET(HttpUrlRoute.TEACHER_LOGIN)
    Observable<Response<BaseBean>> login(@Query("teachId") String teachId,
                                         @Query("password") String password);

    主活动代码:

       private void onClick(View v) {
            final String address = "https://www.wanandroid.com/";
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(address)//基础URL 建议以 / 结尾
                    .addConverterFactory(GsonConverterFactory.create())//设置 Json 转换器
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//RxJava 适配器
                    .build();
            API workPlaneService = retrofit.create(API.class);
            workPlaneService
                    .logintext("yuhang66", "123456")
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Observer<Response<LoginBean>>() {
                        @Override
                        public void onCompleted() {
    
                        }
    
                        @Override
                        public void onError(Throwable e) {
                            Log.i("eraaa", e.toString());
                        }
    
                        @Override
                        public void onNext(Response<LoginBean> loginBeanResponse) {
                            Headers headers = loginBeanResponse.headers();//我们通过Response的headers对象获取到响应头信息。
                            List<String> values = headers.values("Set-Cookie");//通过“Set-Cookie”字段获取到服务器返回的Cookie信息
    
                            for (String s : values) {
                                Log.e("ohmys", s);
                            }
                            Log.e("ohmys", "@" + values);//这里responseBodyResponse.body()获取的就是ResultBean对象
                            initText(values);//登录成功后 发起收藏页面的请求
                        }
                    });
        }
    
     private void initText(final List<String> values) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //这是一个查询产品详细信息的接口
                    FormBody contentBody = new FormBody.Builder()
                            .add("id", "2334")
                            .build();
                    //将cookie信息放到请求头中去
                    Request contentRequest = new Request.Builder()
                            .url("https://www.wanandroid.com/lg/collect/1165/json")
                            .header("Cookie", values.toString())//添加cookie
                            .post(contentBody)
                            .build();
    
    
                    okhttp3.Call contentCall = client.httpClient.newCall(contentRequest);
                    try {
                        okhttp3.Response contentResponse = contentCall.execute();
                        String contentResult = contentResponse.body().string();
                        Log.d("lalala", contentResult);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    

    这样就可以收藏成功了
    要将cookie进行持久化的话 你可以使用SharedPerference等其他方法进行报存到android中

    展开全文
  • android读写cookie的方法

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


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


    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 &lt; 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的代码:


    /**声明一些数据库操作的常量*/
      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";
    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);
          
        }
    }
    展开全文
  • Android 客户端Cookie失效问题

    千次阅读 2015-07-22 15:22:49
    今天,遇到了Android客户端cookie失效场景,当时有个疑问,cookie的有效期是由哪个属性决定?这个有效期是服务端进行判断还是客户端判断? Cookie实际上是一小段文本信息。在Web程序中,客户端浏览器请求服务器...
  • AndroidCookie的使用

    万次阅读 2016-05-16 17:35:44
    这篇文章可以引导你深入理解cookies,并且告诉你怎样设置一个cookie handler来使 HTTP URL 网络连接使用到这些cookie.Java SE 提供了一个主要类来实现这一功能,java.net.CookieHandler还有一些其他辅助
  • Android的cookie的获取与保存的Demo
  • 主要介绍了解决Android webview设置cookiecookie丢失问题,具有很好参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Android中CookieManager的底层实现   native cookie共享。 native写的cookie, webview里的js可以拿到。   Andorid APK反逆向解决方案:梆梆加固原理探寻       ...
  • Android WebView Cookie

    2018-04-18 15:16:42
    原文地址:https://www.cnblogs.com/mrray/p/6202840.html因项目需要,需要在App中...同步Cookie到WebView方法网上有大量参考资料,也可以参考下面代码:/** * Sync Cookie */ private void syncCookie(Cont...
  • Android问题—AndroidCookie问题处理

    千次阅读 2017-04-05 21:57:40
    说这个之前,首先我们要理解两个概念:Session和Cookie Cookie只是Session机制一种常用形式,我们也可以使用其他方式来作为客户端一个唯一标识, 这个由服务器决定,唯一能够证明一个客户端标识就好!...
  • httpClient请求和服务器session保持同步,webView对cookie的管理 httpClient请求和服务器session保持同步,webView对cookie的管理
  • Android的cookie

    2017-06-28 15:32:46
    Cookie是由服务器端生成,发送给User-Agent(一般是浏览器,客户端),浏览器会将Cookie的key/value保存到某个目录下文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。...
  • androidcookie

    2016-08-19 11:47:22
    目前Cookie已经成为标准,所有主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。 由于HTTP是一种无状态协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一...
  • android webview cookie同步

    2019-09-28 11:11:27
    每次登录之后都要同步一下COOKIE到WEBVIEW,否则WebView拿是旧 在进行APP+H5混合开发时候,一些功能是用native方法实现,如登陆,一些功能是用H5实现。所以往往需要将在native方法登陆状态同步到H5中避免...
  • 因为主页都是webview,所以在启动页要获取本地cookie用来判断用户是否登录 之前是这样写CookieManager cookieManager = CookieManager.getInstance(); String cookieStr = cookieManager.getCookie(domian)...
  • Android的cookie介绍

    千次阅读 2017-03-03 14:48:55
    android 客户端 Cookie处理 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上数据(通常经过加密)。 Cookie最早是网景公司前雇员Lou Montulli在...
  • android cookie

    2013-03-21 11:05:25
    做了一个android网络应用,要求用自己实现webview去访问web网站,并且在远程登录成功之后把cookie写入到手机,保留用作以后自动登录。找了好多资料。发觉读取cookies倒还用很普遍,可是通过程序写cookie却没有...
  • Android网络请求中Cookie的持久化以下有两种方法 第一种方法是针对Volley来实现,这种方法比较简单,但是对于有多重类型Request必须都要按照这种方式来处理,耦合度比较高。 第二种方法只要设置一次,之后所有...

空空如也

空空如也

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

android的cookie