I developing an application with Swift and an UIWebView that opens a webapp. Each time our users open the app, they need to login again because the app is not storing cookies. How can i solve it?
I tried this to store cookies:
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
println(request.URL!.absoluteString)
var cookiesData = NSKeyedArchiver.archivedDataWithRootObject(NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies!)
NSUserDefaults.standardUserDefaults().setObject(cookiesData, forKey: "savedCookies")
return true
}
And to retrieve cookies again:
NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always
let cookies = NSKeyedUnarchiver.unarchiveObjectWithData(NSUserDefaults.standardUserDefaults().objectForKey("cookies"))
I don't know how can i retrieve cookies in an array and iterate them.
Try this code:
To save cookie
let cookieJar: NSHTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
let data: NSData = NSKeyedArchiver.archivedDataWithRootObject(cookieJar.cookies)
let ud: NSUserDefaults = NSUserDefaults.standardUserDefaults()
ud.setObject(data, forKey: "cookie")
To retrieve cookie
let ud: NSUserDefaults = NSUserDefaults.standardUserDefaults()
let data: NSData? = ud.objectForKey("cookie") as? NSData
if let cookie = data {
let datas: NSArray? = NSKeyedUnarchiver.unarchiveObjectWithData(cookie) as? NSArray
if let cookies = datas {
for c in cookies as! [NSHTTPCookie] {
NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(c)
}
}
}
Here's the answer in Objective-C:
To save cookies:
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookieJar.cookies];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"Cookies"];
To load cookies:
NSData *data = [defaults objectForKey:@"Cookies"];
if (data) {
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:data];
if (cookies) {
for (NSHTTPCookie *cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With