WebView不接受某些Cookie

时间:2018-10-07 06:31:18

标签: android cookies webview android-webview session-cookies

我正在Webview中加载一个网站,该网站使用一些cookie来存储会话。我写了以下几行来接受Cookie

CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().setAcceptCookie(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    CookieManager.setAcceptFileSchemeCookies(true);
    CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
}
webView.loadUrl("https://www.irctc.co.in/nget/train-search");

在某个阶段(从支付网关付款之后),调用shouldOverrideUrlLoading方法,此后应该可以到达交易成功页面,但仍会继续登录页面。这是我的方法:

@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    Log.d(TAG, "The URL is loaded in webview itself");
    return false;
}

使用Chrome开发者工具,我可以看到以下网站的Cookie Cookies used by website

当我调用方法CookieManager.getInstance().getCookie(url)时,我可以看到Web视图中存在cookie JESESSIONID SLB_Cookie ,但是不确定本地存储 cookie。另外,如果我在Chrome中删除本地存储 cookie,则会得到完全相同的页面(登录页面),而不是WebView之类的交易成功页面。因此,我认为无论如何如果我要检查本地存储cookie是否存在于webview中,如果不存在,那么如果我添加它,就可以完成工作。但是我无法完成任何一项任务。

1 个答案:

答案 0 :(得分:1)

如果要将登录用户数据传递到Webview中的cookie,请按照以下步骤进行操作 前几天,我不得不将登录对象传递到特定的URL 如下。

            WebSettings settings = webViewRoi.getSettings();
            settings.setDomStorageEnabled(true);
            settings.setJavaScriptEnabled(true);
            settings.setJavaScriptCanOpenWindowsAutomatically(false);
            settings.setAppCacheEnabled(true);
            settings.setAllowUniversalAccessFromFileURLs(true);
            settings.setAllowFileAccessFromFileURLs(true);

            Gson gson = new GsonBuilder().disableHtmlEscaping().create();


            FormsDTO formsDTO = new FormsDTO();
            FormsDTOProfile dtoProfile = new FormsDTOProfile(LoginActivity.loginInfoDTO.getProfile());
            formsDTO.setProfile(dtoProfile);
            formsDTO.setAuthorized(true);
            formsDTO.setToken(LoginActivity.loginInfoDTO.getToken());

            String out123 = gson.toJson(formsDTO);

            String auth2 = URLEncoder.encode(out123, "UTF-8");

            String z = "userInfo=" + auth2;  // here userinfo is the key of cookie
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);


            cookieManager.setCookie(url, z);
            webViewRoi.setWebChromeClient(new WebChromeClient());
            webViewRoi.loadUrl(url);

因此,如果您知道cookie的键名,则可以通过cookie传递登录对象。希望对您有帮助。