每个域限制问题的iOS / Android WebView Cookie

时间:2018-02-06 23:26:15

标签: android ios xamarin webview uiwebview

我正在尝试使用Xamarin构建包含Android和iOS网页的移动应用程序。在Android上,我必须在页面加载时覆盖http请求,以增加每个域允许的cookie数量。这些饼干正在破坏自己(我想覆盖旧的饼干AKA我们的Auth cookie ......)。我现在试图在iOS上做同样的事情。问题是我必须解决这个问题。有谁知道直接为iOS或Android增加设置。我找到的Chrome的默认值比Android WebView中的20更高。 我的问题是:

每个域和/或总计iOS上的Cookie限制是什么? 如何将其设置为更高?

下面的代码就是我现在用来拦截iOS中的请求。

[Foundation.Export("webView:decidePolicyForNavigationAction:decisionHandler:")]
    public void DecidePolicy(WKWebView webView, WKNavigationAction wkNavigationAction,
        Action<WKNavigationActionPolicy> action)
    {

        var relativeWebUrl = webView.Url.RelativePath.ToLower();

        if (wkNavigationAction.Request.HttpMethod.ToLower().Contains("get") && !wkNavigationAction.Request.Headers.ContainsKey(new NSString("x-requested-with"))
            && !relativeWebUrl.Contains("/bundles") && !relativeWebUrl.Contains("/styles") && !relativeWebUrl.Contains("/scripts")
                                                           && !relativeWebUrl.Contains(".png") && !relativeWebUrl.Contains(".jpg")
                                                           && !relativeWebUrl.Contains(".gif") && !relativeWebUrl.Contains(".woff")
                                                           && !relativeWebUrl.Contains("/font"))
        {

            var requestCopy = wkNavigationAction.Request.MutableCopy() as NSMutableUrlRequest;
            var newHeaderDictionary =
                new NSMutableDictionary { { new NSString("x-requested-with"), new NSString("com.summitracing.MobileAppSRE") } };

            if (requestCopy != null)
                foreach (var requestCopyHeader in requestCopy.Headers)
                {
                    if (!requestCopyHeader.Key.ToString().ToLower().Contains("Cookie"))
                        newHeaderDictionary.Add(requestCopyHeader.Key, requestCopyHeader.Value);
                }

            var currentCookies = NSHttpCookieStorage.SharedStorage.Cookies;
            var rawCookiesString = String.Empty;

            foreach (var currentCookie in currentCookies)
            {
                if (!rawCookiesString.Contains(currentCookie.Name))
                    rawCookiesString += currentCookie.Name + "=" + currentCookie.Value + ";";
            }

            newHeaderDictionary.Add(new NSString("Cookie"), new NSString(rawCookiesString));

            if (requestCopy != null)
            {
                requestCopy.ShouldHandleCookies = true;
                requestCopy.Headers = newHeaderDictionary;
                webView.LoadRequest(requestCopy);
            }
        }

        //allow currently executing request
        action.Invoke(WKNavigationActionPolicy.Allow);

    }

0 个答案:

没有答案