如何管理安卓中的cookie jam 安卓

NoHttp详解之Android如何管理Cookie
博客专家
NoHttp详解之Android如何管理Cookie
NoHttp使用之自动管理Cookie
欢迎大家关注Android开源网络框架NoHttp:
在线直播视频和代码下载:
版权声明:转载请注明本文转自严振杰的博客:
AndroidStuio和Eclipse怎么使用NoHttp
,视频来自直播,欢迎大家加上面的QQ群来看我直播。
NoHttp自动管理Cookie
  NoHttp是一个很优秀的框架,比Volley强大多了,而且自动维持Cookie,尤其缓存功能强大,但是今天我们主要来看看NoHttp的Cookie怎么玩。
  其实NoHttp的Cookie功能已经和浏览器功能一模一样了,但是我们开发中难免有一些变态的要求,所以我们来看看NoHttp为我们提供了什么样的特别操作呢?
怎么从NoHttp拿到Cookie呢?
A. NoHttp自动维持Cookie,实现了和浏览器一样的功能;并且开发者可以自己从响应中拿到Cookie;
  从某个响应拿到某个请求指定的Cookie,下文的HttpCookie是Java自带的一个类:
List&HttpCookie& cookies = Response.getHeaders().getCookies();
  从CookieManager中拿到所有的Cookie,比如我们要把Cookie共享给WebView的时候:
CookieManager cookieManager = (CookieManager)NoHttp.getDefaultCookieHandler();
List&HttpCookie& cookies = cookieManager.getCookieStore().getCookies();
  可以看到是先从NoHttp拿到NoHttp默认的CookieManager,然后拿到CookieStore,然后拿到所有的Cookie。
用NoHttp怎么人工管理
A. 如果不想让NoHttp管理Cookie,我们想自己管理怎么办?
  通过NoHttp.setDefaultCookieHandler()设置CookieManager,这个CookieManager系统java.net包下的,我们只要传CookieStore进去就可以了。但是要想实现Cookie持久化可不是一个简单的事情,这里呢还是推荐大家直接使用NoHttp,不过呢大家可以尝试着写一下。
NoHttp.setDefaultCookieHandler(new CookieManager(cookieStore, CookiePolicy.ACCEPT_ALL));
B. 怎么操作NoHttp的Cookie?
  这里先拿到NoHttp的CookieStore
CookieManager cookieManager = (CookieManager)NoHttp.getDefaultCookieHandler();
CookieStore cookieStore = cookieManager.getCookieStore();
  我们来看看CookieStore有什么功能?
cookieStore.add(URI, HttpCookie);
cookieStore.get(URI);
cookieStore.getCookies();
cookieStore.remove(URI, HttpCookie);
cookieStore.getURIs();
cookieStore.removeAll();
C. 如果我们想干涉NoHttp的Cookie管理过程怎么办?
  通过系统的CookiManager拿到NoHttp的DiskCookieStore,然后设置一CookieStoreListener:
CookieManager cookieManager = (CookieManager)NoHttp.getDefaultCookieHandler();
DiskCookieStore cookieStore = (DiskCookieStore)cookieManager.getCookieStore();
cookieStore.setCookieStoreListener(new CookieManagerListener());
  我们看看CookieListener有什么功能:
public class CookieManagerListener implements CookieStoreListener {
* 当NoHttp的Cookie被保存的时候被调用
public void onSaveCookie(URI uri, HttpCookie cookie) {
String path = uri.getPath();
if (!TextUtils.isEmpty(path) && path.equals(cookie.getPath())) {
* 当NoHttp的Cookie过期时被删除时此方法被调用
public void onRemoveCookie(URI uri, HttpCookie cookie) {
  也就是在Cookie被保存或者Cookie被移除时通知了开发者,我们可以在保存之前改变Cookie的某些属性,或者在移除的时候我们做一些特殊的操作。
NoHttp 源码及Demo托管在Github欢迎大家Star:
我的热门文章
即使是一小步也想与你分享posts - 145,&
comments - 8,&
trackbacks - 0
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
Cookie最早是网景公司的前Lou Montulli在1993年3月的发明。
Cookie是由服务器端生成,发送给User-Agent(一般是,客户端),浏览器会将Cookie的key/value保存到某个目录下的内,下次请求同一网站时就发送该Cookie给(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于而言也可以直接写入jsessionid,这样服务器可以知道该用户是否合法用户以及是否需要重新登录等。
服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是&购物车&之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。目前Cookies 最广泛的是记录用户登录信息,这样下次访问时可以不需要输入自己的用户名、密码了&&当然这种方便也存在用户信息泄密的问题,尤其在多个用户共用一台电脑时很容易出现这样的问题。
Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为&0&或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。
Android 中Cookie 的操作:
逻辑:Cookie是由服务器生成的。客户端第一次向服务器发送Http请求时,由于没有Cookie,在Http请求头中即Header中不包含"Cookie"。此时在服务器返回的相应(HttpResponse)中会多一个字段"Set-Cookie",此字段的值就是服务器生成的Cookie值,下次再由此客户端程序访问该服务器时,就可以把该Cookie值放入Http请求头中。服务器就会知道是哪个用户再次访问了该服务器。客户端需要保存该Cookie以此用户再次访问服务器时使用。Cookie会有一个失效时间,客户端在Cookie失效后再次访问服务器,服务器会返回一个Cookie失效的状态码(比如403之类的),并在HttpResponse中包含"Set-Cookie"字段,这里面是新的Cookie。客户端需要做的操作是:1.将新Cookie覆盖旧的Cookie。2.跳入用户登录界面,让用户用新的Cookie重新登陆。Cookie 可以保存在SharePreferenced或者Sqlite中。
实现代码:
public byte[] doPost(String url, List&NameValuePair& values){
  HttpPost post = new HttpPost(url);
  post.setHeadr("Accept", "");
阅读(...) 评论()您的举报已经提交成功,我们将尽快处理,谢谢!
大家还关注

我要回帖

更多关于 安卓webview cookie 的文章

 

随机推荐