近期做了一个需要与Webview交互的项目,需要实现网页上的自动登录功能,参考了一些OC的代码,改为Swift
首先是保存网页Cookie的方法,建议在WebView的代理方法webViewDidFinishLoad(webView: UIWebView)中调用
保存Cookie
func saveCookies() {
获取到当前的所有Cookie值
let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies
将所有Cookie转为NSData格式
let data: NSData = NSKeyedArchiver.archivedDataWithRootObject(cookies!)
将转换格式的Cookie保存
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "cookie")
}
其次是往网页中添加自定义Cookie值的方法,可以与前端人员协商,判断你是否是用ios浏览登录等信息,作为特殊的标识来辨别,建议在加载Webview之前写入内存的Cookie中
添加自定义Cookie
func setCookieToWeb(cookiename:String,cookievalue:String,cookieDomain:String){
创建一个参数字典
var cookieProperties = [String: AnyObject]()
设置Cookie的名称
cookieProperties[NSHTTPCookieName] = cookiename
设置Cookie名称对应的值
cookieProperties[NSHTTPCookieValue] = cookievalue
设置Cookie的有效域名
cookieProperties[NSHTTPCookieDomain] = cookieDomain
设置Cookie的路径
cookieProperties[NSHTTPCookiePath] = "/" // 路径
将字典转为Cookie
let cookies = NSHTTPCookie(properties: cookieProperties)
将Cookie的值设置到当前内存中
NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(cookies! )
}
最后是将存储的cookie取出,再设置到内存中
获取保存的cookie并设置网页cookie
func retrieveCookies() {
判断存储的cookie
if (NSUserDefaults.standardUserDefaults().objectForKey("cookie") != nil) {
获取cookie
let cookiesdata = NSUserDefaults.standardUserDefaults().objectForKey("cookie") as! NSData
if cookiesdata.length > 0 {
将cookie转为数组
let cookies: NSArray = NSKeyedUnarchiver.unarchiveObjectWithData(cookiesdata) as! NSArray
//循环将Cookie数组内的cookie添加到内存中
for cookie in cookies {
NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(cookie as! NSHTTPCookie)
}
}
}
}
网友评论