近期做了一個(gè)需要與Webview交互的項(xiàng)目钱豁,需要實(shí)現(xiàn)網(wǎng)頁(yè)上的自動(dòng)登錄功能,參考了一些OC的代碼疯汁,改為Swift
首先是保存網(wǎng)頁(yè)Cookie的方法牲尺,建議在WebView的代理方法webViewDidFinishLoad(webView: UIWebView)中調(diào)用
保存Cookie
func saveCookies() {
獲取到當(dāng)前的所有Cookie值
let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies
將所有Cookie轉(zhuǎn)為NSData格式
let data: NSData = NSKeyedArchiver.archivedDataWithRootObject(cookies!)
將轉(zhuǎn)換格式的Cookie保存
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "cookie")
}
其次是往網(wǎng)頁(yè)中添加自定義Cookie值的方法,可以與前端人員協(xié)商幌蚊,判斷你是否是用ios瀏覽登錄等信息谤碳,作為特殊的標(biāo)識(shí)來(lái)辨別溃卡,建議在加載Webview之前寫入內(nèi)存的Cookie中
添加自定義Cookie
func setCookieToWeb(cookiename:String,cookievalue:String,cookieDomain:String){
創(chuàng)建一個(gè)參數(shù)字典
var cookieProperties = [String: AnyObject]()
設(shè)置Cookie的名稱
cookieProperties[NSHTTPCookieName] = cookiename? ??
設(shè)置Cookie名稱對(duì)應(yīng)的值
cookieProperties[NSHTTPCookieValue] = cookievalue
設(shè)置Cookie的有效域名
cookieProperties[NSHTTPCookieDomain] = cookieDomain? ? ?
設(shè)置Cookie的路徑
cookieProperties[NSHTTPCookiePath] = "/"? ? ? ? // 路徑
將字典轉(zhuǎn)為Cookie
let cookies = NSHTTPCookie(properties: cookieProperties)
將Cookie的值設(shè)置到當(dāng)前內(nèi)存中
NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(cookies! )
}
最后是將存儲(chǔ)的cookie取出,再設(shè)置到內(nèi)存中
獲取保存的cookie并設(shè)置網(wǎng)頁(yè)cookie
func retrieveCookies() {
判斷存儲(chǔ)的cookie
if (NSUserDefaults.standardUserDefaults().objectForKey("cookie") != nil) {
獲取cookie
let cookiesdata = NSUserDefaults.standardUserDefaults().objectForKey("cookie") as! NSData
if cookiesdata.length > 0 {
將cookie轉(zhuǎn)為數(shù)組
let cookies: NSArray = NSKeyedUnarchiver.unarchiveObjectWithData(cookiesdata) as! NSArray
//循環(huán)將Cookie數(shù)組內(nèi)的cookie添加到內(nèi)存中
for cookie? in cookies {
NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(cookie as! NSHTTPCookie)
}
}
}
}