我使用android WebView
的PostUrl
登录我的网站,它可以正常工作并显示我网站的主页,但是使用WebView的LoadUrl
方法后,它要求我再次登录,并且用户将被重定向到登录页面。我进行了很多搜索,发现了很多答案,但是没有一个对我有用。这是我的代码:
WebView wb;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_antivirus, container, false);
CookieSyncManager.createInstance(getActivity().getBaseContext());
CookieSyncManager.getInstance().startSync();
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
wb = (WebView)rootView.findViewById(R.id.Pardakht);
wb.getSettings().setJavaScriptEnabled(true);
wb.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
CookieSyncManager.getInstance().sync();
}
});
// log in to my website successfully <~~~
String url="http://crm.example.com/user.php?op=bG9naW4=";
String postData="hidlogin=1&username="+username+"&password="+password+"&submit=%D9%88%D9%86%D9%87";
wb.postUrl(url, EncodingUtils.getBytes(postData, "BASE64"));
CookieSyncManager.getInstance().sync();
// when i want to open new page it will be redirected to login page
wb.loadUrl("http://crm.example.com/customer.php?action=trafik");
return rootView;
}
最佳答案
您不能调用wb.postUrl()
,然后调用wb.loadUrl()
之后几乎立即调用。您必须先完成第一个操作,然后再调用第二个。
当您执行第二个loadUrl()
时,第一个postUrl()
尚未完成,因此,当调用loadUrl()
时,WebView
不具有会随postUrl()
响应返回的会话cookie。 CookieManager
代码可能不是必需的。您可以将所有内容删除。
如果您需要一个接一个地调用它们,请使用onPageFinished()
确定帖子何时完成,以便您可以开始下一个:
@Override
public void onPageFinished(WebView view, String url) {
if (url.startsWith("http://crm.example.com/user.php") {
wb.loadUrl("http://crm.example.com/customer.php?action=trafik");
}
}
取出所有
CookieManager
/ CookieSyncManager
的东西,然后尝试一下。您可以将PHP代码下载到该服务器上吗?您应该考虑使用一个URL来接收用户名/密码数据并显示您的
customer.php?action=trafik
页面。