Php 在HTTPURLCONNECTION和WebView之间共享创建的会话

Php 在HTTPURLCONNECTION和WebView之间共享创建的会话,php,android,session,cookies,webview,Php,Android,Session,Cookies,Webview,我很难找到解决问题的办法。我使用HttpsUrlConnection开始从android到php文件的Web服务器会话。以下是我用来在登录web服务器时设置cookies以使会话正常工作的代码: CookieManager cookieManager = new CookieManager(); CookieHandler.setDefault(cookieManager); 这似乎使我的会话正常工作,这正是我想要的。然而,我有一个问题。在我的应用程序的一部分中,我使用的是一个网络视图,该视图

我很难找到解决问题的办法。我使用HttpsUrlConnection开始从android到php文件的Web服务器会话。以下是我用来在登录web服务器时设置cookies以使会话正常工作的代码:

CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
这似乎使我的会话正常工作,这正是我想要的。然而,我有一个问题。在我的应用程序的一部分中,我使用的是一个网络视图,该视图访问的页面超过了在线登录页面。因此,为了让它工作,我需要使用HttpsUrlConnection以某种方式发送带有JSONObject的会话,以便绕过身份验证

以下是我用于WebView的代码:

webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);      
webView.loadUrl(URL);
它可以很好地加载页面,但不使用HttpsUrlConnection使用的会话。我可以反复使用HttpsUrlConnection,它会绕过身份验证,因为它使用cookie存储,php文件会记住会话。我不知道如何在web视图中以相同的方式传递这些cookie或会话,以便正确使用页面

任何帮助都将不胜感激


编辑:我通过创建一个自定义cookie管理器类来解决这个问题,该类为cookiemanager和webview cookie管理器共享cookie,这是因为webview有自己的CookieStore,名为android.net.cookiemanager。您创建了java.net.Cookiemanager的一个实例。 他们彼此不认识。你必须在这两者之间交换cookies

1.)创建您自己的java.net.CookieManager实例,该实例将获取android.net.CookieManager实例:

public class MyCookieManager extends CookieManager  {

private android.webkit.CookieManager webkitCookieManager = null;

/**
 * Constructor
 * @param cookieManager android.webkit.CookieManager
 * @param cookiePolicy CookiePolicy
 */
public  MyCookieManager (android.webkit.CookieManager cookieManager, CookiePolicy cookiePolicy) {

    super(null, cookiePolicy);
    this.webkitCookieManager = cookieManager;
    //Cookies are allowed
    this.webkitCookieManager.setAcceptCookie(true);
}

/**
  * @param uri URI
 * @param responseHeaders Map<String, List<String>>
 */
@Override
public void put(URI uri, Map<String, List<String>> responseHeaders) {

    if (responseHeaders == null) {

        return;
    }

    for (String headerKey : responseHeaders.keySet()) {

        if ( headerKey == null || "Set-Cookie".equalsIgnoreCase(headerKey) == false) {

            continue;
        }


        for (String headerValue : responseHeaders.get(headerKey)) {


            webkitCookieManager.setCookie(uri.toString(), headerValue);
        }
    }

}

/**
 * @param uri URI
 * @param requestHeaders Map<String, List<String>>
 * @return Map<String, List<String>>
 */
@Override
public Map<String, List<String>> get(URI uri, Map<String, List<String>> requestHeaders) {   

    if (requestHeaders == null) {

        return null;
    }

    Map<String, List<String>> res = new java.util.HashMap<String, List<String>>();

    // get cookies from Webview CookieManager
    String cookie = webkitCookieManager.getCookie(uri.toString());

    if (cookie == null)  {

        cookie = "";
    }
    res.put("Cookie", Arrays.asList(cookie));

    return res;
}
}

这是因为WebView有自己的CookieStore,名为android.net.CookieManager。您创建了java.net.Cookiemanager的一个实例。 他们彼此不认识。你必须在这两者之间交换cookies

1.)创建您自己的java.net.CookieManager实例,该实例将获取android.net.CookieManager实例:

public class MyCookieManager extends CookieManager  {

private android.webkit.CookieManager webkitCookieManager = null;

/**
 * Constructor
 * @param cookieManager android.webkit.CookieManager
 * @param cookiePolicy CookiePolicy
 */
public  MyCookieManager (android.webkit.CookieManager cookieManager, CookiePolicy cookiePolicy) {

    super(null, cookiePolicy);
    this.webkitCookieManager = cookieManager;
    //Cookies are allowed
    this.webkitCookieManager.setAcceptCookie(true);
}

/**
  * @param uri URI
 * @param responseHeaders Map<String, List<String>>
 */
@Override
public void put(URI uri, Map<String, List<String>> responseHeaders) {

    if (responseHeaders == null) {

        return;
    }

    for (String headerKey : responseHeaders.keySet()) {

        if ( headerKey == null || "Set-Cookie".equalsIgnoreCase(headerKey) == false) {

            continue;
        }


        for (String headerValue : responseHeaders.get(headerKey)) {


            webkitCookieManager.setCookie(uri.toString(), headerValue);
        }
    }

}

/**
 * @param uri URI
 * @param requestHeaders Map<String, List<String>>
 * @return Map<String, List<String>>
 */
@Override
public Map<String, List<String>> get(URI uri, Map<String, List<String>> requestHeaders) {   

    if (requestHeaders == null) {

        return null;
    }

    Map<String, List<String>> res = new java.util.HashMap<String, List<String>>();

    // get cookies from Webview CookieManager
    String cookie = webkitCookieManager.getCookie(uri.toString());

    if (cookie == null)  {

        cookie = "";
    }
    res.put("Cookie", Arrays.asList(cookie));

    return res;
}
}