但是在写android界面的时候又时不时的会用到一些WebView组件,这时候访问一个以经登录的页面的时候cookie设置就有个问题
在HttpClient中保存下来的Cookie怎么设置到WebView组件里,让WebView也保持住Cookie状态,也就是登录状态呢?
CookieSyncManager和CookieManager就是做这种事的,下面来看代码里怎么设置Cookie让WebView也保持登录状态:
Java代码
/**
* 同步一下cookie
*/
public static void synCookies(Context context, String url) {
CookieSyncManager.createInstance(context)
CookieManager cookieManager = CookieManager.getInstance()
cookieManager.setAcceptCookie(true)
cookieManager.removeSessionCookie()//移除
cookieManager.setCookie(url, cookies)//cookies是在HttpClient中获得的cookie
CookieSyncManager.getInstance().sync()
}
在android里面在调用webView.loadUrl(url)之前一句调用此方法就可以给WebView设置Cookie
注:这里一定要注意一点,在调用设置Cookie之后不能再设置
Java代码
webView.getSettings().setBuiltInZoomControls(true)
webView.getSettings().setJavaScriptEnabled(true)
这类属性,否则设置Cookie无效。
1、首先 在android应用程序开始的activity中的oncreaty()方法中注册cookiemanager。如下:<span style="font-size:18px">//设置网络请求cookie
CookieSyncManager.createInstance(this)</span>
2、然后在到网络请求的那个类中设置如下 设置和获取cookie的方法
<span style="font-size:18px"> protected String getCookie() {
CookieManager cookieManager = CookieManager.getInstance()
String cookie = cookieManager.getCookie("cookie")
if (cookie != null) {
return cookie
} else {
return ""
}
}
protected void setCookie(String cookie) {
CookieManager cookieManager = CookieManager.getInstance()
cookieManager.setCookie("cookie", cookie)
}</span>
3、最后一步就在urlConnection.openConnectin()的后面设置如下方法:
uc = (HttpURLConnection) new URL(url + "?" + paramsStr.toString()).openConnection()
uc.setRequestProperty("Cookie", getCookie())
<pre style="background-color:#2b2b2bcolor:#a9b7c6font-family:'宋体'font-size:12.0pt"><span style="background-color:#344134">setCookies</span>(uc.getHeaderFields())<span style="color:#cc7832"></span>
好了到这里就完成了cookie的设置
3. 过期按需处理一下
附1:cookie的获取
response.headerFields = conn.getHeaderFields()
setCookies(response.headerFields)
/**
* 存储cookie
* @param headerFields
*/
protected void setCookies(Map<String, List<String>>headerFields) {
if (null == headerFields) {
return
}
List<String>cookies = headerFields.get(COOKIES_KEY)
if (null == cookies) {
return
}
for (String cookie : cookies) {
setCookie(cookie)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)