我使用android WebViewPostUrl登录我的网站,它可以正常工作并显示我网站的主页,但是使用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页面。

08-18 02:41