Java 在android中区分HTTPOnly Cookie与其他Cookie

Java 在android中区分HTTPOnly Cookie与其他Cookie,java,android,cookies,httponly,Java,Android,Cookies,Httponly,在我当前的项目中,我们正在Android应用程序和服务器之间实现会话处理。 现在根据我们的设计,Android应用程序应该只接受HTTP Cookies,并删除所有其他Cookies。 但是查看所有可用的选项,我找不到任何类或方法来帮助我识别cookie是否为HTTPOnly 我以以下方式存储cookie: connections = (HttpURLConnection) serverURL.openConnection(); // Setting cookie

在我当前的项目中,我们正在Android应用程序和服务器之间实现会话处理。 现在根据我们的设计,Android应用程序应该只接受HTTP Cookies,并删除所有其他Cookies。 但是查看所有可用的选项,我找不到任何类或方法来帮助我识别cookie是否为HTTPOnly

我以以下方式存储cookie:

        connections = (HttpURLConnection) serverURL.openConnection();
        // Setting cookies manager
        java.net.CookieManager manager = new java.net.CookieManager();
        manager.setCookiePolicy(new CookiePolicy() {

            @Override
            public boolean shouldAccept(URI uri, HttpCookie cookie) {
                return cookie.getSecure();
            }
        });
        CookieHandler.setDefault(manager);

        connections.setDoInput(true);
        connections.setDoOutput(true);
        connections.setConnectTimeout(TIME_OUT);

        connections.getOutputStream().write(data);

        InputStream inputStream = connections.getInputStream();
        CookieStore cookieJar = manager.getCookieStore();
        if (cookieJar != null) {
            List<HttpCookie> cookies = cookieJar.getCookies();
            for (HttpCookie httpCookie : cookies) {

                Log.i("yash", httpCookie.toString());
            }
        }
connections=(HttpURLConnection)serverURL.openConnection();
//设置cookies管理器
java.net.CookieManager=new java.net.CookieManager();
manager.setCookiePolicy(新CookiePolicy(){
@凌驾
公共布尔值shouldAccept(URI、HttpCookie cookie){
返回cookie.getSecure();
}
});
setDefault(管理器);
connections.setDoInput(true);
连接。设置输出(真);
设置连接超时(超时);
connections.getOutputStream().write(数据);
InputStream InputStream=连接。getInputStream();
CookieStore cookieJar=manager.getCookieStore();
if(cookieJar!=null){
List cookies=cookieJar.getCookies();
用于(HttpCookie HttpCookie:Cookie){
Log.i(“yash”,httpCookie.toString());
}
}
但这没有任何HTTPOnly方法

通过一些谷歌浏览,我发现它有HTTPOnly属性,并且它也观察到了rfc2965。但是为什么谷歌不支持这个RFC6265呢?

根据HttpOnly的说法,这个字段只受支持,但由于某些原因,这个字段没有任何访问器或变异器

为了能够访问和修改httpOnly字段,您应该使用反射:

// Workaround httpOnly (getter)
private boolean getHttpOnly() {
    try {
        Field fieldHttpOnly = cookie.getClass().getDeclaredField("httpOnly");
        fieldHttpOnly.setAccessible(true);

        return (boolean) fieldHttpOnly.get(cookie);
    } catch (Exception e) {
        // NoSuchFieldException || IllegalAccessException ||
        // IllegalArgumentException
        Log.w(TAG, e);
    }
    return false;
}

// Workaround httpOnly (setter)
private void setHttpOnly(boolean httpOnly) {
    try {
        Field fieldHttpOnly = cookie.getClass().getDeclaredField("httpOnly");
        fieldHttpOnly.setAccessible(true);

        fieldHttpOnly.set(cookie, httpOnly);
    } catch (Exception e) {
        // NoSuchFieldException || IllegalAccessException ||
        // IllegalArgumentException
        Log.w(TAG, e);
    }
}

令人惊讶的是,在Android上没有看到任何解决方案。我看到了一些相互矛盾的信息,关于任何带有httpOnly标志的cookie是否会受到Android浏览器的约束,即使您(从服务器或通过客户端)成功地设置了标志。谷歌自己将Android列为唯一不支持httpOnly的平台,但我不确定该表的日期。嗨,franmontiel,你知道上述反射方式的其他选择吗(因为它在Android Pie中被列入黑名单)?