【问题标题】:Android Webkit CookieManager: How to get all cookies via CookieManager?Android Webkit CookieManager:如何通过 CookieManager 获取所有 cookie?
【发布时间】:2020-01-02 01:26:20
【问题描述】:

我正在尝试通过CookieManager.getInstance().getCookie()android.webkit.WebView 中加载m.facebook.com 的cookie,但它没有给出预期的结果

myWebView.loadUrl("http://m.facebook.com");

String cookies = CookieManager.getInstance().getCookie("m.facebook.com");

我想使用c_user 字段来检查用户是否已登录,以便我可以重定向到自定义 URL。 在 Google Chrome 中查看 http://m.facebook.com 的 cookie 会显示许多字段,例如:

c_user datr fr dnonce m_pixel_ratio sb wd x-referer xs

Google Chrome with cookies of m.facebook.com

但是getCookie()方法只返回dnonce

希望得到帮助。

**该场景是我想开发一个具有单个 Web 视图的 Android 应用程序。当应用程序启动时,我想检查用户是否使用 Facebook 登录,如果是,则将其重定向到某个 URL 否则打开 Facebook 登录页面。 为了检查用户是否成功登录,我想出了检查 c_user(唯一用户 ID)cookie 的逻辑,但我无法通过 getCookie 方法获取它。

【问题讨论】:

    标签: java android android-studio cookies


    【解决方案1】:

    你可以使用这个获取cookie值

    getCookie("http://www.example.com","cookieName");
    

    将函数声明为

    public String getCookie(String siteName,String cookieName){     
        String CookieValue = null;
    
        CookieManager cookieManager = CookieManager.getInstance();
        String cookies = cookieManager.getCookie(siteName);       
        String[] temp=cookies.split(";");
        for (String ar1 : temp ){
            if(ar1.contains(cookieName)){
                String[] temp1=ar1.split("=");
                CookieValue = temp1[1];
                break;
            }
        }              
        return CookieValue; 
    }
    

    为所有 cookie 尝试这个类。 CookieManager 与 java.net

    import java.net.CookieHandler;
        import java.net.CookieManager;
        import java.net.CookiePolicy;
        import java.net.HttpCookie;
        import java.util.List;
    
        private class MyCookieManager
        {       
            private CookieManager mCookieManager = null;
    
            MyCookieManager() {
                mCookieManager = new CookieManager();
                mCookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
                CookieHandler.setDefault(mCookieManager);
            }
    
            private List<HttpCookie> getCookies() {
                if(mCookieManager == null)
                    return null;
                else
                    return mCookieManager.getCookieStore().getCookies();
            }
    
            public void clearCookies() {
                if(mCookieManager != null)
                    mCookieManager.getCookieStore().removeAll();
            } 
    
            public boolean isCookieManagerEmpty() {
                if(mCookieManager == null)
                    return true;
                else 
                    return mCookieManager.getCookieStore().getCookies().isEmpty();
            }
    
    
            public String getCookieValue() {
                String cookieValue = new String();
    
                if(!isCookieManagerEmpty()) {
                    for (HttpCookie eachCookie : getCookies())
                        cookieValue = cookieValue + String.format("%s=%s; ", eachCookie.getName(), eachCookie.getValue());
                }
    
                return cookieValue;
            }
    
        }
    

    【讨论】:

    • 问题是我在String cookies = cookieManager.getCookie(siteName); 中只获得了单个cookie dnonce,因为我期望Chrome 浏览器中显示更多cookie。浏览器是否在android中存储更多的cookies webview?
    • @MuneebShafiq 检查类以获取所有 cookie
    • @AnasMaher 这个函数甚至没有返回一个 cookie!
    • @MuneebShafiq 你能解决这个问题吗?我也面临着 cookie 的一种问题 - stackoverflow.com/questions/59611761/…。我没有得到 cookie 属性。
    • @RaghavSharma 实际上有些网站不允许读取 cookie!标头中有一个标志限制 android 读取所有 cookie!我正在寻找我读过的链接,但找不到它!如果我找到了,我会分享给你。简而言之,如果网站不允许您读取 cookie 的所有属性!
    【解决方案2】:

    您需要将确切的 url 传递给 CookieManage getCookie 方法。您在 WebView loadUrl 方法中加载的 url。 例如:

    webview.loadUrl("https://m.facebook.com");
    

    然后当你调用获取cookie的方法时。

    getCookie("https://m.facebook.com");
    

    并且还要导入正确的 CookieManager。

    import android.webkit.CookieManager;
    
    public String getCookie(String site) {
        CookieManager cookieManager = CookieManager.getInstance();
        String cookies = cookieManager.getCookie(site);
        return cookies;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多