您的位置:首页 > 移动开发

Android用WebView获取sessionid保持登录状态

2016-11-11 12:02 701 查看
我们需要和web服务器保持登录状态。所以我们需要记录sessionid;

我们将网页用webview加载之后,用CookieManager 来获取本地的cookies 。然后设置到webview里面去。

我们可以在下面这个回调方法中获取到。并且保存到sharedpreferences中去



然后我们在mWebView.loadUrl(url);之前设置一下cookies



就基本套路来说就是这样。不过在设置之后 不能在添加:

// 支持javascript

mWebView.getSettings().setJavaScriptEnabled(true);

// 设置出现缩放工具

mWebView.getSettings().setBuiltInZoomControls(false);

否则设置的cookies不起作用。。。。。

上个完整代码 :

布局文件中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="test.yihan.testweb.MainActivity">

<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>


activity中:

public class MainActivity extends AppCompatActivity {
String cookies = "";
SharedPreferences sp;
String url = "http://shop.beishute.com.cn/wx_beishute_rtm/index.php/Home/About/index.html";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建一个sharedpreferences
sp = getSharedPreferences("aaa", MODE_PRIVATE);

WebView mWebView = (WebView) findViewById(R.id.webview);
// 自适应屏幕
mWebView.getSettings()
.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
mWebView.getSettings().setLoadWithOverviewMode(true);
// 支持javascript
mWebView.getSettings().setJavaScriptEnabled(true);
// 设置可以支持缩放
mWebView.getSettings().setSupportZoom(false);
// 设置出现缩放工具
mWebView.getSettings().setBuiltInZoomControls(false);
// 扩大比例的缩放
mWebView.getSettings().setUseWideViewPort(false);
mWebView.setWebChromeClient(new MyWebChromeClient());
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url); // 在当前的webview中跳转到新的url
//获取cookies
CookieManager cm = CookieManager.getInstance();
String cookies = cm.getCookie(url);
sp.edit().putString("cook", cookies).apply();
return true;
}
});

synCookies(this, sp.getString("cook", ""));
mWebView.loadUrl(url);
}

/**
* 同步一下cookie
*/
public void synCookies(Context context, String url) {
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
//        cookieManager.removeSessionCookie();//移除
cookieManager.setCookie(url, cookies);
CookieSyncManager.getInstance().sync();
}

final Context myApp = this;

final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsConfirm(WebView view, String url, final String message, final JsResult result) {
new AlertDialog.Builder(myApp)
//                    .setTitle("App Titler")
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (message.equals("确定要退出吗?")) {
result.confirm();
finish();
} else {
result.confirm();
}
}
})
.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
})
.create()
.show();
return true;
}
}

}


!!! 我们需要注意不用忘了网络权限
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: