维护Cookies UIWebView iOS Xamarin

hel*_*rld 13 cookies uiwebview xamarin.ios ios

我有一个验证用户的UIWebView.我想启用单点登录.为此,我希望在用户首次通过身份验证时存储Cookie,然后在下次启动应用程序时,Cookie应自动传递到UIWebView并在没有再次输入凭据的情况下对用户进行身份验证.

我正在做类似下面的事情来使用UIWebView

var uri = new Uri(AuthUrl);
           var nsurl = new NSUrl(uri.GetComponents(UriComponents.HttpRequestUrl, UriFormat.UriEscaped));
           wvLogin.LoadRequest(new NSUrlRequest(nsurl));
Run Code Online (Sandbox Code Playgroud)

CookieManager.cs

public static void SaveCookies()
{

   var cookieData = new NSMutableArray ();
   var cookieStorage = NSHttpCookieStorage.SharedStorage;
   foreach (var nscookie in cookieStorage.Cookies) {
    var cookieDictionary = new NSMutableDictionary ();
    cookieDictionary.Add (NSHttpCookie.KeyName, new NSString (nscookie.Name));
    cookieDictionary.Add (NSHttpCookie.KeyValue,new NSString ( nscookie.Value));
    cookieDictionary.Add (NSHttpCookie.KeyDomain,new NSString ( nscookie.Domain));
    cookieDictionary.Add (NSHttpCookie.KeyPath, new NSString (nscookie.Path));
    cookieDictionary.Add (NSHttpCookie.KeySecure, new NSString ( nscookie.IsSecure.ToString()));
    cookieDictionary.Add (NSHttpCookie.KeyVersion, new NSString (nscookie.Version.ToString()));
    if (nscookie.ExpiresDate != null) {
     cookieDictionary.Add (NSHttpCookie.KeyExpires, nscookie.ExpiresDate);
    }
    cookieData.Add (cookieDictionary);
   }
   cookieData.WriteToFile (StoragePath(), true);
}
  public static string StoragePath()
  {
   //var paths = NSSearchPath.GetDirectories (NSSearchPathDirectory.LibraryDirectory, NSUserDomainMask, true);
   var paths =  NSSearchPath.GetDirectories(NSSearchPathDirectory.LibraryDirectory, NSSearchPathDomain.User, true);
   return paths [0].ToString ();
  }
public static void DeleteCookies()
{
NSHttpCookieStorage cookieStorage = NSHttpCookieStorage.SharedStorage;
foreach (var nscookie in cookieStorage.Cookies)
{
cookieStorage.DeleteCookie(nscookie);
}
   NSUserDefaults.StandardUserDefaults.Synchronize ();
}
  public static void LoadCookies()
  {
   var cookies = NSMutableArray.FromFile (StoragePath());
   var cookieStorage = NSHttpCookieStorage.SharedStorage;
   foreach (var nscookie in cookieStorage.Cookies)
   {
    cookieStorage.SetCookie(nscookie);

   }
  }
Run Code Online (Sandbox Code Playgroud)

LoginScreen.cs

void wvLogin_LoadFinished(object sender, EventArgs e)
    {
    int redirectCount = 0;
    redirect = System.Net.WebUtility.UrlDecode(wvLogin.Request.Url.AbsoluteString);
     // Do some stuff
    CookieManager.SaveCookies();

    }
    }
    else
    {
    AppDelegate.Logout();
    }
    }
    } 
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?感谢任何帮助,因为我是iOS和Xamarin的新手.

小智 4

您可以通过设置合适的到期日期来设置服务器以发出持久 cookie。UIWebview 将存储/恢复此类 cookie。

您还可以从 NSHTTPCookieStorage 获取 UIWebView 中登录时设置的所有 cookie,并将其保存在钥匙串中的 NSUserDefaults 中。您可以在应用程序启动时从 NSUserDefaults/keychain 读取 cookie,将其插入 NSHttpCookieStorage,它们将可供 UIWebView 以及 NSURLConnection、NSURLRequest 等使用。