我正在尝试使用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);
}