Android WebView不接受某些cookie

Android WebView不接受某些cookie,android,cookies,webview,android-webview,session-cookies,Android,Cookies,Webview,Android Webview,Session Cookies,我正在Webview中加载一个网站,它使用一些cookies来存储会话。我写了以下几行来接受cookies CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().startSync(); CookieManager.getInstance().setAcceptCookie(true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP

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

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


当我调用方法
CookieManager.getInstance().getCookie(url)
时,我可以看到CookieJESESSIONIDSLB_Cookie出现在webview中,但不确定该本地存储Cookie。另外,如果我删除Chrome中的本地存储cookie,我会得到完全相同的页面(登录页面),而不是像WebView这样的事务成功页面。因此,我认为如果通过任何方式检查本地存储cookie是否存在于webview中,如果不存在,那么如果我添加它,我的工作就会完成。但我无法完成这两项任务。

如果您想将登录用户数据传递到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传递您的登录对象。希望对您有所帮助。

是否要将登录对象传递到webview中url上的cookie?我只希望打开的最后一个页面应该是事务成功页面,而不是登录页面。原因是(我认为)该网站的本地存储cookie未加载到webview中,所以我希望加载该cookie。或者,如果存在其他问题的替代方案(或原因),我想知道。你必须弄清楚该网站是如何接受cookie的,并且你必须像我在下面回答的那样传递cookie。请不要在这里添加聊天内容。你已经研究了这个问题,这是理所当然的,你不需要陈述它。你被困多久可能与此无关,通常只是为了乞讨和恳求而添加到帖子中。我们不喜欢添加感谢和其他细节——我们更喜欢这里的技术写作,并且经常指出堆栈溢出不是聊天室。作为参考,我有时会在评论中添加以下建议:注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,闲聊的材料和缩写的txtspk,恳求,你被困多久了,投票建议,元评论等。只需解释你的问题,并展示你已经尝试了什么,你期望什么,实际上发生了什么。这是我的对象,你也可以忽略它,并将你的令牌传递到一个序列化的表单中。非常感谢。。。CookieManager CookieManager=CookieManager.getInstance();cookieManager.setAcceptCookie(true);setCookie(url,z);为我做的工作。。。我以前也尝试过setCookie方法,但我认为它遗漏了一些东西。但现在它像一个符咒一样工作:)