您的位置:首页 > 其它

URL Session(Cookie)

2015-12-05 21:50 330 查看
URL Session(NSURLSession)

URL Session(NSURLSessionDataTask))

URL Session(NSURLSessionUploadTask)

URL Session(NSURLSessionDownloadTask)

URL Session(Cache).md

URL Session(Cookie)

当你访问一个网站时,NSURLRequest都会帮你主动记录下来你访问的站点设置的cookie,如果Cookie存在的话,会把这些信息放在NSHTTPCookieStorage容器中共享,当你下次再访问这个站点时,NSURLRequest会拿着上次保存下来了的cookie继续去请求。

cookie和缓存一样有两个类控制。

NSHTTPCookieStorage:Cookie管理器。

NSHTTPCookie:Cookie实际对象。

1 NSHTTPCookieStorage

NSHTTPCookieStorage实际是一个共享的单例对象,它存储整个应用的所有Cookie,并在所有线程中是同步的。

1.1 获取NSHTTPCookieStorage

// 获取共享的NSHTTPCookieStorage
public class func sharedHTTPCookieStorage() -> NSHTTPCookieStorage
// 获取应用程序组的NSHTTPCookieStorage
public class func sharedCookieStorageForGroupContainerIdentifier(identifier: String) -> NSHTTPCookieStorage


1.2 获取和设置Cookie访问策略

public var cookieAcceptPolicy: NSHTTPCookieAcceptPolicy

public enum NSHTTPCookieAcceptPolicy : UInt {
case Always // 全部允许
case Never // 全部不允许
case OnlyFromMainDocumentDomain // 只允许顶级地址的cookie通过
}


1.3 增加和删除Cookie

// 增加cookie
public func setCookie(cookie: NSHTTPCookie)
// 增加cookie的同时绑定地址
public func setCookies(cookies: [NSHTTPCookie], forURL URL: NSURL?, mainDocumentURL: NSURL?)
// 删除指定cookie
public func deleteCookie(cookie: NSHTTPCookie)
// 根据日期删除cookie
public func removeCookiesSinceDate(date: NSDate)


1.4 获取Cookie

// 获取所有cookie
public var cookies: [NSHTTPCookie]? { get }
// 根据路径放回cookie
public func cookiesForURL(URL: NSURL) -> [NSHTTPCookie]?
// 获取所有cookie并排序
public func sortedCookiesUsingDescriptors(sortOrder: [NSSortDescriptor]) -> [NSHTTPCookie]


1.5 通知

// cookieAcceptPolicy变动通知
public let NSHTTPCookieManagerAcceptPolicyChangedNotification: String
// cookie 变化
public let NSHTTPCookieManagerCookiesChangedNotification: String


2 NSHTTPCookie

NSHTTPCookie是cookie的实际对象。这里不再详细描述,有兴趣的朋友查阅API《NSHTTPCookie Class Reference

3 实战演练

//
//  YJHTTPCookieVC.swift
//  NSURLSession
//
//  Created by yangjun on 15/12/5.
//  Copyright © 2015年 阳君. All rights reserved.
//

import UIKit

/// NSHTTPCookie
class YJHTTPCookieVC: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

// 共享cookie
let sharedHTTPCookie = NSHTTPCookieStorage.sharedHTTPCookieStorage()

// 手动创建一个cookie
var dict = [String : AnyObject]()
dict[NSHTTPCookieName] = "阳君"
dict[NSHTTPCookieValue] = "937447974"
dict[NSHTTPCookieVersion] = 1
dict[NSHTTPCookieDomain] = "blog.csdn.net"
dict[NSHTTPCookiePath] = "/"
if let cookie = NSHTTPCookie(properties: dict) {
print("手动创建\(cookie.properties)")
sharedHTTPCookie.setCookie(cookie)
}

// 删除所有
if let list = sharedHTTPCookie.cookies {
// 获取cookie的header
print(NSHTTPCookie.requestHeaderFieldsWithCookies(list))
for cookie in list {
// 读取cookie
print(cookie.properties)
// 删除cookie
sharedHTTPCookie.deleteCookie(cookie)
}
}
}

}


其他

参考资料

URL Session Programming Guide

NSHTTPCookie Class Reference

[NSHTTPCookie Class Reference]

文档修改记录

时间描述
2015-12-05博文完成
2015-12-12更改链接

版权所有

CSDN:http://blog.csdn.net/y550918116j

GitHub:https://github.com/937447974/Blog
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: