【问题标题】:Share session between HTTPURLConnection with webview in Android在 Android 中的 HTTPURLConnection 与 webview 之间共享会话
【发布时间】:2014-12-15 11:05:32
【问题描述】:

我正在开发一个应用程序,它在登录成功时向服务器发送登录身份验证请求,然后我在会话中设置用户名并创建我的会话。我在 webview 上显示服务器的 jsp 页面,所以我的 jsp 页面需要会话,但他们没有找到任何会话,因为它是由 HTTPURLConnection 创建的。所以我想知道如何将 HTTPURLConnection 的会话共享到 webview。

设置会话的代码

String uname=request.getparameter("Username");
if(LoginSucesss)
{
    session.setAttribute("uid",uname);
}

请不要将此问题标记为重复,它是原始问题。

提前致谢

【问题讨论】:

  • 你可以同步 cookie。
  • 我不想使用cookies。有什么办法吗?
  • 据我所知,我不这么认为
  • 好的。我如何使用 cookie 来做到这一点??

标签: java android jsp session android-webview


【解决方案1】:
@Override
protected void onCreate(Bundle savedInstanceState) {
    // Get cookie manager for WebView
    // This must occur before setContentView() instantiates your WebView
    android.webkit.CookieSyncManager webCookieSync =
        CookieSyncManager.createInstance(this);
    android.webkit.CookieManager webCookieManager =
        CookieManager.getInstance();
    webCookieManager.setAcceptCookie(true);

    // Get cookie manager for HttpURLConnection
    java.net.CookieStore rawCookieStore = ((java.net.CookieManager)
        CookieHandler.getDefault()).getCookieStore();

    // Construct URI
    java.net.URI baseUri = null;
    try {
        baseUri = new URI("http://www.example.com");
    } catch (URISyntaxException e) {
        // Handle invalid URI
        ...
    }

    // Copy cookies from HttpURLConnection to WebView
    List<HttpCookie> cookies = rawCookieStore.get(baseUri);
    String url = baseUri.toString();
    for (HttpCookie cookie : cookies) {
        String setCookie = new StringBuilder(cookie.toString())
            .append("; domain=").append(cookie.getDomain())
            .append("; path=").append(cookie.getPath())
            .toString();
        webCookieManager.setCookie(url, setCookie);
    }

   //TODO:Your Code
}

【讨论】:

  • 是否必须在onCreate()中写下代码。我在不同的类别中有 HTTPURLConnection 和 webview?
  • 这里的基本点是展示它是如何完成的,现在由你来决定你应该如何实现它,但请记住在使用 setContentView(R.layout.someLayout); 之前完成所有这些事情;
  • 我正在获取我通过 servlet 在 android connection.getHeaderField() 中使用以下方法设置的 cookie 但我如何将其传递给 webview?
  • if(ucon.getResponseCode()==HttpURLConnection.HTTP_OK) { String h=ucon.getHeaderField("Set-Cookie"); Log.i("RAE","Cookie is="+ h); Map> headerFields = ucon.getHeaderFields(); List cookiesHeader = headerFields.get("Set-Cookie"); for(int i=0;i
  • 如果你的webview在另一个activity中并且你想在activity之间共享一些数据(cookies),你可以使用setArguments(),或者你可以使用Android shared prefrences来存储一段时间的数据并且然后清除它,或者您可以创建一个实例类来跨多个活动和类使用数据
猜你喜欢
  • 2017-05-06
  • 2012-06-28
  • 2014-08-10
  • 1970-01-01
  • 2014-10-25
  • 2016-02-07
  • 2011-01-29
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多