最近在做项目时用到了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了下,哈哈,结果正确了,再也不用反复登录了。
分享到:
相关推荐
这涉及到一个关键的技术点:如何保持和传递登录cookie,使得用户在原生应用登录后,WebView也能识别到这个登录状态,从而避免用户反复登录。本文将深入探讨这个主题,主要围绕"原生登录cookie保持提供webview使用"这...
4. **同步本地存储的cookie**:如果用户在原生应用中登录,我们需要将登录状态同步到WebView,这就涉及到将本地存储的cookie(可能来自SharedPreferences或Keychain)添加到WebView中。反之,当WebView中的cookie...
3. 页面间Cookie共享:在一个WebView内设置的Cookie,会在同一应用内的其他WebView中自动共享,除非明确禁止。 总结来说,WebView是Android应用中一个强大的工具,它不仅可以展示网页内容,还可以通过定制各种策略...
为了保持登录状态和个性化设置,浏览器需要处理Cookie。源码中会有CookieManager的使用。 9. **安全与隐私**: 鉴于隐私保护,浏览器需要处理Do Not Track(DNT)设置,以及SSL/TLS安全连接的建立。 10. **性能...
源码会展示如何创建、切换和关闭WebView实例,以及它们之间的数据共享。 9. **性能优化** 优化加载速度和内存使用是提升用户体验的关键。源码会包含异步加载、内存管理、图片解码等优化策略。 10. **自定义功能**...
此外,还要考虑到网络状态的检测和重试机制。 5. **HTML5解析与渲染**:WebView内部使用WebKit引擎处理HTML5内容,包括CSS样式解析、DOM树构建和页面渲染。开发者可以使用JavaScriptBridge实现JavaScript与Java代码...
不同的Webview之间无法共享数据。(3)页面自适应问题。页面难以兼容适应不同分辨率的设备和浏览器。 本文研究并设计了基于Android+HTML5的在线认证检测系统,主要工作包括以下四个方面: (1)针对多窗口类浏览器...
BrowserSettings通过syncManagedSettings()将共享设置更新到底层(如CookieManager),并遍历mManagedSettings列表,将新的配置同步到每个WebView的WebSettings中,确保所有WebView能实时响应配置变化。 设置界面...
这对于那些需要用户保持登录状态的应用来说,提供了极大的便利。 四、Unity集成 作为一款专为Unity设计的插件,UniWebView 4与Unity的集成十分顺畅。开发者可以通过导入包含在"UniWebView 4 4.0.4.unitypackage...
在Android开发领域,构建一个浏览器或者类似浏览器的应用程序是一项复杂的工作,涉及到许多模块和技术。"android-components"项目正是一款专为解决这个问题而设计的开源库集合。这个项目旨在提供一系列预构建的组件...
通过研究这款浏览器的源码,我们可以学习到许多关于Android应用开发、网络请求处理、渲染引擎以及用户界面设计的知识点。 1. **Android应用基础** - **Activity与Intent**:在Zirco-Browser中,Activity是用户交互...
48. **清除Cookie**:使用`WebView`的`clearCache()`和`clearCookies()`方法。 49. **建立GPRS连接**:通过`HttpURLConnection`或`HttpClient`处理网络连接。 50. **PreferenceActivity使用**:用于创建设置界面,...
从Android 4.0到6.0,WebView的JavaScript引擎和性能得到了不断提升。在不同版本的Android系统中,WebView对JavaScript的支持程度不同,开发者可能需要针对不同版本进行适配和兼容性处理。 26. WebView与原生通信:...