【问题标题】:How to extract httponly cookies from UWP WebView?如何从 UWP WebView 中提取 httponly cookie?
【发布时间】:2019-07-04 11:22:21
【问题描述】:

我知道有一些技术可以通过 HttpBaseProtocolFilter.CookieManager 检索 WebView cookie,它至少在相同应用程序的边界内在 WebView 和 HttpClient 之间共享。但是,它不能访问 httponly cookie。 httponly cookie 也不在 WebView 和 HttpClient 之间共享。坦率地说,我理解这些限制,但在我放弃之前,我想问一下是否有人解决了这个问题?

这就是我需要的。我们有一个用 Java 编写的网站。该站点生成 JSESSION httponly cookie 并将其传递给客户端。我们正在开发一个 UWP 应用程序,我们在其中实例化扮演客户端角色的 WebView。然后,我们注入 javascript 在 UWP 代码和显示的页面之间进行通信。一切都按预期完美运行。现在我们需要在当前会话的上下文中从 UWP 代码中执行一些请求。为此,我们需要在 UWP 中为 HttpClient 使用相同的 JSESSION,但我找不到这样做的方法。

每次我从 UWP 发送请求时,都会生成一个新的 JSESSION,这会阻止逻辑正常工作。那么,有什么方法可以从 WebView 中检索该 httponly cookie,或者用分配给 HttpClient 的 cookie 覆盖它?

【问题讨论】:

    标签: javascript cookies webview uwp cookie-httponly


    【解决方案1】:

    如果您在 UWP 中使用 Windows.Web.Http.HttpClient 和 WebView,cookie 会通过应用程序的上下文在 HttpClient 和 WebView 之间自动共享,包括 HttpOnly cookie。

    为了验证它,我在这个document 上使用c# 代码在加载asp.net 网页时创建了一个HttpOnly cookie。然后,我制作了一个 UWP 应用程序并在 XAML 页面上添加了一个 WebView 来查看网站,在代码隐藏中,我使用以下代码来获取 cookie:

    HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
    HttpCookieCollection cookieCollection = filter.CookieManager.GetCookies(new Uri("http://localhost:xxxxx/Default.aspx"));
    foreach (var cookie in cookieCollection)
    {
        Debug.WriteLine(cookie.Name+": "+cookie.Value+" HttpOnly: "+cookie.HttpOnly);
    }
    

    您可以看到屏幕截图。我可以得到 HttpOnly cookie:

    【讨论】:

    • 当然,我在发布我的问题之前尝试过,并且没有共享 httponly cookie。当 WebView 发送其请求时,为其创建了一个 JSESSION,然后当我使用 HttpClient 发送请求时,为该请求创建了另一个 JSESSION。 HttpBaseProtocolFilter.CookieManager 也没有列出该 httponly cookie。我看到您的样本和我的测试之间存在差异。您正在使用 localhost 和 http。也许处理方式不同。就我而言,我通过 https 与单独托管的网站进行通信。该网站是用 Java 编写的。可能是主机使用不同的方式设置cookie。
    • 你的意思是先用WebView查看你的网站,然后再用HttpClient向同一个URL发送请求吗?
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 2016-08-03
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2020-05-14
    • 1970-01-01
    相关资源
    最近更新 更多