electron cookiewebview有办法获取到cookie吗

android webview 如何存储cookie_百度知道Android开发(35)
之前项目开发中涉及到webView时候遇到过cookie问题,当时也没有搞明白持久化、同步、清除这些概念,
就copy了代码到项目里,今天总结下:
关于cookie的介绍参考下面帖子吧:
1.我们android始终有网络请求但也没有出现过cookie的问题,所以先说下为什么webView使用的时候会出现cookie的问题:
默认情况下,android应用中的httpClient和第三方的网络请求框架保存的cookie都是非永久性的,
而我们在android应用中打开web页面的逻辑基本都是用户已登录状态之后的操作逻辑,而web请求
属于HTTP无连接状态协议的请求,每个请求之间是相互独立没有联系的,登陆状态需要靠cookie来
保存,这时候就出现了我们打开的web页面始终是登陆页的问题,因为web并不知道你在android客户
端已经登陆了因为你打开web的url中并没有携带它想要的cookie。
2.解决方法:
so,如果希望url能够打开期望的web页面,就必须携带保存着已登陆用户信息的cookie,这个cookie就在android中的
HttpClient中,但正如上面所说这些cookie并不是持久性的所以我们无法获得,因为cookie的持久化保存对于app来说
是影响性能并且没有意义的。这时我们就需要在请求web的URL的接口的时候把cookie持久化,然后在webActivity中把
HttpClient中的持久化cookie同步到将要打开的URL中,最后再退出webActivity的时候清除HttpClient中的cookie。
3.如何持久化网络请求中cookie、如何同步网络请求中cookie到web的url中、如何清除cookie?
3.1 持久化cookie:
首先在Application类中添加如下代码:
public class MyApplication extends Application {
。。。。。。
//A persistent cookie store,即一个持久化的cookie仓库
private PersistentCookieStore myCookieS
//获取持久化的cookie
public PersistentCookieStore getMyCookieStore() {
if (myCookieStore == null)
myCookieStore = new PersistentCookieStore(this);
return myCookieS
//清除cookie
public void clearCookies(Context context) {
if (myCookieStore == null) {
myCookieStore = new PersistentCookieStore(context);
myCookieStore.removeAll();
。。。。。。
接下来是我们封装的可以提供持久化cookie的网络请求代码的封装:
* post 提交–持久化cookies
* @param activity
* @param url
* @param obj
* @param callback
public static void postWeb(final Activity activity, String url, JSONObject obj) {
//重新创建一个OkHttpClient对象做网络请求,因为只有这个请求需要持久化cookie,应用中的其它请求并不需要
OkHttpClient client = new OkHttpClient();
client.setCookieHandler(new CookieManager(MyApplication.getInstance().getMyCookieStore(), CookiePolicy.ACCEPT_ALL));
//请求参数
FormEncodingBuilder builder = new FormEncodingBuilder();
Map&String, String& params = getSbParams(obj);
for (String key : params.keySet()) {
builder.add(key, params.get(key));
final Request request = new Request.Builder()
.post(builder.build())
Call call = client.newCall(request);
call.enqueue(new Callback() {
public void onFailure(final Request request, final IOException e) {
activity.runOnUiThread(new Runnable() {
public void run() {
public void onResponse(final Response response) throws IOException {
final String res = response.body().string();
LogUtils.e("log--返回数据:res = " + res);
3.2 同步网络请求中cookie到web的url中:
在要跳转到需要登陆之后才能进入的web页的时候,需要对url进行cookie同步,代码如下:
public static void synCookies(Context context, String url) {
//CookieSyncManager负责管理webView中的cookie
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
List cookies = MyApplication.getInstance().getMyCookieStore().getCookies(); //获取okhttp网络请求中持久化的cookie
for (int i = 0; i & cookies.size(); i++) {
HttpCookie cookie = cookies.get(i);
if (cookie.getName().equals(“PHPSESSID”)) {
// cookies是在HttpClient中获得的cookie,这里是从okhttp中获得,加入到webView的cookie中
cookieManager.setCookie(url, cookie.getName() + “=” + cookie.getValue());
CookieSyncManager.getInstance().sync();
3.3 退出WebActivity之前需要清除cookie:
private void close() {
//清除WebView中cookie
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
//清除okhttp中cookie
MyApplication.getInstance().clearCookies(this);
//关闭WebActivity
注意:项目开发中具体需不需要客户端做cookie的持久化,取决于接口和h5开发人员的处理。cookie的持久化就是为了
保存用户的登陆状态,而如果接口端通过请求参数中本地保存的用户信息可以判断登陆状态,那么客户端可能就不需要
通过持久化cookie来实现登陆状态的保存。
另附webview中js防注入漏洞处理总结:
实际使用总结:
实际使用中我们可以不引入第三方库,只需要拷贝如下三个方法到本地工程中:
InjectedChromeClient、JsCallback、JsCallJava,然后创一个类继承InjectedChromeClient即可。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:12013次
排名:千里之外
原创:39篇
评论:27条
(1)(2)(1)(5)(2)(8)(3)(6)(2)(2)(1)(7)(1)(1)(2)为什么webview保存cookie后获取不到
为何webview保存cookie后获取不到 webview里面的网页做了登录功能,登录后保存cookie,但是一刷新页面cookie就丢了,请问有人碰到吗? ------解决思路---------------------- CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().startSync
为何webview保存cookie后获取不到webview里面的网页做了登录功能,&登录后保存cookie,&但是一刷新页面cookie就丢了,&请问有人碰到吗?------解决思路----------------------CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
WebView&webview&=&new&WebView(this);
webview.getSettings().setJavaScriptEnabled(true);
setContentView(webview);&&&&&&
webview.loadUrl([URL]);
实时------解决思路----------------------没有遇到过cookie丢失,只要同步了cookie,都能取到的,所以请检查代码。但是同步的时候,有点延时,直接去请求,cookie可能还没同步过去。
你最喜欢的Android(安卓)WebView设置cookie
最近两天一直想用安卓模拟登陆,利用新的WebView显示登陆后可以访问的页面,但是不管怎么访问需要登陆后才能访问的页面,还是跳回到登陆页,后来网上看了下是cookie没有设置,找了半天才到到合适的设置方法:
登陆方法:
public static
HttpContext localC
public static
List//此为保存的cookie
String cookieS
// public static Cookie cookie =
* 登陆时保存cookie
* @param url
* @param data
public String login(String url,String data[]){
HttpClient client =
String html =
client = new DefaultHttpClient();
// 创建cookie store的本地实例
CookieStore cookieStore = new BasicCookieStore();
localContext = new BasicHttpContext();
// 绑定定制的cookie store到本地内容中
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpPost post = new HttpPost(url);
List parameters = new ArrayList();
parameters.add(new BasicNameValuePair("username", data[0]));
parameters.add(new BasicNameValuePair("passwd", data[1]));
parameters.add(new BasicNameValuePair("login", "%B5%C7%A1%A1%C2%BC"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters,"utf-8");
post.setEntity(entity);
HttpResponse response = client.execute(post,localContext);
if(response.getStatusLine().getStatusCode() == 200){
InputStream content = response.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content,"gbk"));
String line =
while((line=buffer.readLine())!=null){
cookies = cookieStore.getCookies();
System.out.println("cookies.size():"+cookies.size());
if (!cookies.isEmpty()) {
for(int i=0;i<cookies.size();i++){
System.out.println("- "+cookies.get(i).toString());
buffer.close();
System.out.println("UtilsLogin:"+response.getStatusLine().getStatusCode());
} catch (Exception e) {
e.printStackTrace();
if(client!=null){
client.getConnectionManager().shutdown();
Activity中的oncreate()方法:
private WebView wvTempS
private String receiveU
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp_web_view);
wvTempShow = (WebView) findViewById(R.id.wv_tempShow);
Intent intent = this.getIntent();
receiveUrl = intent.getStringExtra("openUrl");
//获得cookie管理者
CookieManager cookieManager = CookieManager.getInstance();
//获取登陆时的cookie
String oldCookie =
UtilsLogin.cookies.get(0).getName()+"="+UtilsLogin.cookies.get(0).getValue()+";"+
UtilsLogin.cookies.get(1).getName()+"="+UtilsLogin.cookies.get(1).getValue()+";" ;
System.out.println("oldCookie:"+oldCookie);
cookieManager.setCookie(receiveUrl, oldCookie);
wvTempShow.getSettings().setDefaultTextEncodingName("gbk");
wvTempShow.loadUrl(receiveUrl);
wvTempShow.setWebViewClient(new MyWebViewClient());
class MyWebViewClient extends WebViewClient{
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
需要注意的是:要看访问的页面需要什么样的cookie字符串可以用以下方法:
CookieManager cookieManager = CookieManager.getInstance();
String CookieStr = cookieManager.getCookie("http://bkjw./student/public/menu.?menu=mnall.asp");
System.out.println("TempWebViewonPageFinished = " + CookieStr);
然后自己像以上String oldCookie中一样自己拼好,再在cookieManager.setCookie(url,cookieString);中设置
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'webview的cookie清除 - 开源中国社区
当前访客身份:游客 [
当前位置:
webview中清除cookie,我在网上参考别人的http://my.oschina.net/tingzi/blog/193697,
我的布局是这样的,在一个activity上有一个返回的button,还有一个webview,在button监听上设置的是remveCookie(this)方法,同时销毁该activity。
private&void&removeCookie(Context&context)&{
&&&&&&&&CookieSyncManager.createInstance(context);&&
&&&&&&&&CookieManager&cookieManager&=&CookieManager.getInstance();&
&&&&&&&&cookieManager.removeAllCookie();
&&&&&&&&CookieSyncManager.getInstance().sync();&&
注:我的webview的属性有一下几点:
&&&&&&&&&// 支持JS&webview.getSettings().setJavaScriptEnabled(true);
& & & & // 支持缩放
& & & & webview.getSettings().setSupportZoom(true);
& & & & // 打开关闭使用缓存
& & & & webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
& & & & webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
&&&&&&&&webview.getSettings().setSavePassword(false);
& & & & webview.getSettings().setSaveFormData(false);
&&&&&&&&webview.loadUrl(urls);
现在问题来了,我的这个链接是163邮箱,我第一次进去的时候登录并记住了密码,当我点击返回键销毁这个有webview的activity的时候,再次进入到这个activity,但是webview上loadUrl已经执行了,就是没有网页显示?求大神指教啊
共有0个答案
更多开发者职位上
有什么技术问题吗?
类似的话题

我要回帖

更多关于 wkwebview 获取cookie 的文章

 

随机推荐