最近在做项目时用到了webview打开指定链接的网页,可已经把webview设置了cookie但始终跳转到登录页面,这明显是cookie没有设置成功导致webview没有将设置好的cookie发送出去……

1
2
3
4
5
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.setCookie(url, cookies);//cookies是在HttpClient中获得的cookie
CookieSyncManager.getInstance().sync();

通过上述代码即可把事先保存下来的cookie和指定的url关联起来,达到保持登录的状态,避免重复登录。遗憾的是,笔者在开发过程当中严格按照上述设置cookie的代码来进行cookie的设置,可结果还是失败,始终跳转到登录页提示登录。后来返回去查看了下Android API文档,发现setCookie函数的两个参数值说明如下:

public void setCookie(String url, String value)

Added in API level 1

Sets a cookie for the given URL. Any existing cookie with the same host, path and name will be replaced with the new cookie. The cookie being set must not have expired and must not be a session cookie, otherwise it will be ignored.

url the URL for which the cookie is set
value the cookie as a string, using the format of the 'Set-Cookie' HTTP response header
value参数的作用是cookie值的字符串形式,但格式一定要是http请求头格式"Set-Cookie"。

api文档里的这句话突然让我惊醒,于是经过百度我查到了cookie的格式相关的文章,现摘抄如下:

原文链接:http://www.cnblogs.com/hdtianfu/archive/2013/05/30/3108295.html

Cookie相关的Http头

    有连个Http头部和Cookie有关:Set-Cookie和Cookie。
    Set-Cookie由服务器发送,它包含在响应请求的头部中。它用于在客户端创建一个Cookie
    Cookie头由客户端发送,包含在HTTP请求的头部中。注意,只有cookie的domain和path与请求的URL匹配才会发送这个cookie。
 
Set-Cookie Header 
    Set-Cookie响应头的格式如下所示:
 
        Set-Cookie: =[; =]...
                    [; expires=][; domain=]
                    [; path=][; secure][; httponly]
 
    expires=: 设置cookie的有效期,如果cookie超过date所表示的日期时,cookie将失效。
                    如果没有设置这个选项,那么cookie将在浏览器关闭时失效。
                    注意:date是格林威治时间(GMT),使用如下格式表示:
                        DAY, DD MMM YYYY HH:MM:SS GMT
 
                        DAY
                            The day of the week (Sun, Mon, Tue, Wed, Thu, Fri, Sat).
                        DD
                            The day in the month (such as 01 for the first day of the month).
                        MMM
                            The three-letter abbreviation for the month (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec).
                        YYYY
                            The year.
                        HH
                            The hour value in military time (22 would be 10:00 P.M., for example).
                        MM
                            The minute value.
                        SS
                            The second value.
 
    domain= : 
    path=:
                    注:临时cookie(没有expires参数的cookie)不能带有domain选项。
                    当客户端发送一个http请求时,会将有效的cookie一起发送给服务器。
                    如果一个cookie的domain和path参数和URL匹配,那么这个cookie就是有效的。

一个URL中包含有domain和path,可以参考http://www.w3school.com.cn/html/html_url.asp

 
    secure   : 表示cookie只能被发送到http服务器。
    httponly : 表示cookie不能被客户端脚本获取到。

在程序中生成expires

    C的方式 
        time_t curTime = time(NULL);
        tm * gmTime = gmtime(&curTime);
 
        char strExperis[50];
        strftime(strTimeBuf, 100, " %a, %d %b %Y %X GMT;", gmTime);
 
    JavaScript的方式 
        var d = new Date();
        var expires = d.toGMTString();
 

上述红色加粗的文字更让我确信了我的判断,此时此刻的心情有多么激动就不用说了,嘿嘿

于是,我在原来设置的cookie字符串上加上了domain和path字段,怀着期盼的心情run了下,哈哈,结果正确了,再也不用反复登录了。

经过此次的bug解决,在编程中不能放过任何一个细节,要对每个运行细节都清清楚楚这样才能避免盲目的去解决问题,最终浪费时间……

欢迎加入讨论群讨论:192209234

Android Cookie共享到WebView避免再次登录(保持登录状态)的更多相关文章

  1. Chromium Graphics: Android L平台上WebView的变化及其对浏览器厂商的影响分析

    原创文章.转载请以链接形式注明原始出处为http://blog.csdn.net/hongbomin/article/details/40799167. 摘要:Google近期公布的Android L ...

  2. Android安全开发之WebView中的地雷

    Android安全开发之WebView中的地雷 0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者 ...

  3. android基础开发之WebView

    WebView 是android平台沟通 http & H5 页面的桥梁. 但是google对这块的表述不是很清晰,而且SDK里面基本看不到源码,只有一个接口而已. 传送:http://dev ...

  4. Android 匿名共享内存C++接口分析

    在上一篇Android 匿名共享内存C接口分析中介绍了Android系统的匿名共享内存C语言访问接口,本文在前文的基础上继续介绍Android系统的匿名共享内存提供的C++访问接口.在C++层通过引入 ...

  5. 门户系统整合sso cookie共享及显示用户信息

    1.1 门户系统整合sso 在门户系统点击登录连接跳转到登录页面.登录成功后,跳转到门户系统的首页,在门户系统中需要从cookie中 把token取出来.所以必须在登录成功后把token写入cooki ...

  6. Django(十三)状态保持 —— cookie与session+ajax异步请求+session记住登录状态+cookie记住登录名密码

    一.状态保持的概述 http协议是无状态的.下一次去访问一个页面时并不知道上一次对这个页面做了什么.因此引入了cookie.session两种方式来配合解决此问题. Duplicate entry:重 ...

  7. Android混合开发之WebView与Javascript交互

    前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...

  8. Android混合开发之WebView使用总结

    前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 混合开发相关博客: Android混合开发之WebView使用总结 Android混合开 ...

  9. 模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站,并实现退出登录功能

    Login <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...

随机推荐

  1. EF CRUD 操作

    1.Add 操作 public bool Add(EFDataModels.User model) { try { int result=0; using (DBEntities db = new D ...

  2. oracle 删除表、表空间、用户时,如何释放磁盘空间

    truncate table tablename DROP STORAGE; drop 执行drop table xx 语句drop后的表被放在回收站(user_recyclebin)里,而不是直接删 ...

  3. vps选择

    banwagonhost.com digitalocean.com vultr.com 优惠链接 https://www.vultr.com/freetrial

  4. JQ改变URL

    看到搜索按钮可以把网址提供到URL里面 $('#search_submit').click(function(){ var keywords = $('#keywords').val(); locat ...

  5. sql语句小练习二

    1.创建一个数据库StudentManage, 初始化大小10M,不足以1M每次增长 create database StudentManage   on ( name = 'StudentManag ...

  6. IE6-IE9兼容性问题列表及解决办法总结

    IE6-IE9兼容性问题列表及解决办法总结 概述 第一章:HTML. 3 第一节:IE7-IE8更新... 31.如果缺少结束标记的 P 元素后跟 TABLE.FORM.NOFRAMES 或 NOSC ...

  7. c++ boost--------------boost::progress_timer小试。

    //--------------------------------------------------------------------------- #include <vcl.h> ...

  8. 为Magento2新主题添加使用Grunt

    Go to \dev\tools\grunt\configs, open your themes.js file, and change it according to the following e ...

  9. leetcode 38

    38. Count and Say The count-and-say sequence is the sequence of integers beginning as follows:1, 11, ...

  10. 1.7见识一下什么叫Linux驱动:LED

    1.任何的Linux驱动都有一个装载函数(装载驱动时调用)和一个卸载函数(卸载驱动时调用): 2.装载函数和卸载函数分别通过module_init和module_exit宏指定.