热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android中Cookie的应用与管理

本文详细介绍了如何在Android应用中处理和使用Cookie,包括登录时获取Cookie并将其存储,以及在WebView中同步这些Cookie以保持用户会话。

在Android应用中,处理用户的登录状态通常涉及到COOKIE的管理和使用。以下是如何在登录时获取COOKIE,并将这些COOKIE应用于WebView中,确保用户在浏览网页时保持登录状态。



首先,在用户登录时,我们需要从服务器响应中提取COOKIE:


String COOKIE = "";
URL url = new URL(HttpUrlConnection.MYURL + "loginAPP.i?username=" + GinsengSharedPreferences.read(LoginActivity.this, "logininfo", "userName") + "&password=" + GinsengSharedPreferences.read(LoginActivity.this, "logininfo", "password"));
HttpURLConnection cOnnection= (HttpURLConnection) url.openConnection();
// 获取Session ID
String COOKIEValue = connection.getHeaderField("Set-COOKIE");
if (COOKIEValue != null) {
String sessiOnId= COOKIEValue.substring(0, COOKIEValue.indexOf(";"));
COOKIE = COOKIEValue;
Map map = new HashMap<>();
map.put("COOKIE", COOKIE);
GinsengSharedPreferences.write(LoginActivity.this, "logininfo", map);
}


接下来,在WebView中加载网页之前,我们需要确保将上述获取到的COOKIE同步到WebView中:


webView = (WebView) findViewById(R.id.webview);
WebSettings settings = webView.getSettings();
// 启用Javascript
settings.setJavascriptEnabled(true);
// 允许访问文件
settings.setAllowFileAccess(true);
// 支持缩放
settings.setBuiltInZoomControls(true);
// 适应手机屏幕
settings.setUseWideViewPort(true);
syncCOOKIEs(DianziJiangAddActivity.this, HttpUrlConnection.MYURL + "loginAPP.i?username=" + GinsengSharedPreferences.read(DianziJiangAddActivity.this, "logininfo", "userName") + "&password=" + GinsengSharedPreferences.read(DianziJiangAddActivity.this, "logininfo", "password"));
webView.loadUrl(HttpUrlConnection.getMyUrl() + "/pjz-classdong.i?uid=" + GinsengSharedPreferences.read(this, "logininfo", "userId"));
webView.setWebViewClient(new MyWebViewClient());


以下是同步COOKIE的具体实现方法:


public static void syncCOOKIEs(Context context, String url) {
COOKIESyncManager.createInstance(context);
COOKIEManager COOKIEManager = COOKIEManager.getInstance();
COOKIEManager.setAcceptCOOKIE(true);
COOKIEManager.setCOOKIE(url, GinsengSharedPreferences.read(context, "logininfo", "COOKIE"));
COOKIESyncManager.getInstance().sync();
}


最后,为了更好地控制WebView的行为,我们自定义了一个WebViewClient类:


private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}

推荐阅读
author-avatar
用户uuexwjx90j
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有