使用Webview访问网站的session问题

在Android项目中,使用WebView实现第三方登录时遇到session丢失的问题。通过研究Android系统自带浏览器的源码,发现是CookieSyncManager的问题。解决方法是在WebView启动时开启CookieSyncManager,关闭时关闭,并清除缓存。通过这些操作,成功解决了WebView无法正常传递session值的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我现在负责的一个项目中,涉及到第三方登录的问题(Oauth认证),我们公司开发的网站项目中,已经实现第三方登录的功能了(这是为网站开发的客户端),所以Android客户端这边就决定用WebView先访问自己服务器的一个web页面,再从公司的页面访问进行第三方登录。于是我想到了用JavaScript和Android交互的方案,在网站上登录完后调用Android本地的方法将值传回来,同时跳转回客户端。
        本来感觉挺简单的,但实际中,遇到了Seesion的问题。就是说用IE访问和Android系统自带浏览器都能正常传递session值,但用WebView是就不行了,session值总是丢,但是不用WebView还没有办法执行回调。哎,解决吧....到网上找了很了,但总感觉和我的问题不一样。最后不行,把Android系统自带浏览器源码大概看了下,发现了点东西。其实是CookieSyncManager的问题,主要就是在WebView页面启动时把CookieSyncManager对象开启,页面关闭时再关闭,还有就是每次要把缓存删除了,直接看代码吧


        package com.lasun.mobile.client.activity;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.lasun.mobile.client.utils.JavaScriptInterface;
public class OauthActivity extends Activity {
public final static String OAUTH_METHOD_TAG = "121333";
private WebView mOauthWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.oauth_activity);
  initComponent();
  String url = "我们公司的一个页面";
  loadUrl(url);
}
private void loadUrl(String url) {
  mOauthWebView.loadUrl(url);
}
// 初始化内容控件
private void initComponent(){
  mOauthWebView=(WebView)findViewById(R.id.webview);
  
  CookieSyncManager.createInstance(this);
  CookieSyncManager.getInstance().startSync();
  CookieManager.getInstance().removeSessionCookie();
  mOauthWebView.clearCache(true);
  mOauthWebView.clearHistory();
  
  mOauthWebView.getSettings().setJavaScriptEnabled(true);
  
//  mOauthWebView.setWebChromeClient(new WebChromeClient());
  mOauthWebView.setWebViewClient(new WebViewClient());
  mOauthWebView.addJavascriptInterface(new JavaScriptInterface(OauthActivity.this), JavaScriptInterface.INVOKE_METHOD_NAME);
}


@Override
protected void onResume() {
  super.onResume();
  CookieSyncManager.getInstance().stopSync();
}

@Override
protected void onStop() {
  super.onStop();
  mOauthWebView.destroy();
  this.finish();
  
}

@Override
protected void onPause() {
  super.onPause();
  CookieSyncManager.getInstance().sync();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值