我的UIWebview根本没有保存cookie。它停留在无 cookie 模式,因此,网页将 cookie 信息放在 url 中。
这就是我正在做的事情。我的UIWebview有一个单例,底部有4个UITabBar按钮。每个选项卡栏按钮将用户带到网站上的不同页面。现在,当用户通过 Web 视图本身导航网站时,一切都很好,会话仍然存在。但是,当用户单击选项卡栏按钮的那一刻,会话就会重置。
我甚至将NSHttpCookieStorage设置为始终接受cookie。还是不去。
这是我的 UIWebview 和 NSMutableUrlRequest 的单例代码
public static UIWebView instance;
public static NSMutableUrlRequest urlRequest;
public static NSUrlConnection connection;
public static NSHttpCookieStorage cookie;
static bool TokenSent = false;
public UIWebViewSingleton () {}
public static UIWebView Instance
{
get
{
if (instance == null)
{
Debugger.Debug ("new uiwebview created");
cookie = NSHttpCookieStorage.SharedStorage;
cookie.AcceptPolicy = NSHttpCookieAcceptPolicy.Always;
connection = new NSUrlConnection();
instance = new UIWebView(new RectangleF(0f, 0f, 320f, 416f));
instance.ScalesPageToFit = true;
instance.LoadStarted += delegate {
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
};
instance.LoadFinished += delegate {
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
AcquireUserId();
};
instance.MultipleTouchEnabled = false;
}
return instance;
}
}
public static NSMutableUrlRequest UrlRequest
{
get
{
if (urlRequest == null)
{
urlRequest = new NSMutableUrlRequest();
}
return urlRequest;
}
}
这就是我根据按下的按钮切换到页面的方式。后退按钮工作正常。
case BTN_BACK:
btn_ret.TouchUpInside += delegate(object sender, EventArgs e) {
UIWebViewSingleton.Instance.GoBack();
};
break;
case BTN_GUIDE:
btn_ret.TouchUpInside += delegate(object sender, EventArgs e) {
UIWebViewSingleton.UrlRequest.Url = new NSUrl(StaticFileNames.GuideUrl);
UIWebViewSingleton.Instance.LoadRequest (UIWebViewSingleton.UrlRequest);
};
break;
case BTN_HOME:
btn_ret.TouchUpInside += delegate(object sender, EventArgs e) {
UIWebViewSingleton.UrlRequest.Url = new NSUrl(StaticFileNames.BaseUrl);
UIWebViewSingleton.Instance.LoadRequest (UIWebViewSingleton.UrlRequest);
};
break;
有没有人知道为什么我的UIWebView不接受cookie?我仍然对NSHttpCookieStorage感到困惑,如果我正确使用它。
多谢。
我选择了这个变通方法,这就足够了。
由于 cookie 在 url 中,我只是解析它并以编程方式将其放入选项卡栏按钮指向的 url 中。问题解决了。