iOS Cookie学习(NSHTTPCookieStorage的使用)
最近也是忙里偷閑,無意中發(fā)現(xiàn)了一位大牛的文章,小小的研究了一下HTTP.今天先寫一點Cookie,之前有過文章都是關(guān)于Cookie的,也沒有深入研究,今天也算是一起學(xué)習(xí)吧.
@interface FQWebGlobalCookies : NSObject
/*
?全局單例
?*/
+ (id)globalCookiesManager;
/*
?對每份URL產(chǎn)生的Cookie 保存起來,以便管理
?對響應(yīng)頭域中的cookie進(jìn)行保存
?*/
- (void)storeResponseCookies:(NSDictionary *)headerFields forURL:(NSURL *)requrl;
/*
?通過requrl獲取對應(yīng)的cookie
?返回url所有對應(yīng)的cookie
?*/
- (NSArray *)getCookiesByURL:(NSURL *)requrl;
/*
?通過getCookiesByURL提取出的cookies 解釋出可以被請求頭域Cookie使用的字符值
?返回一個供Cookie頭域使用的值,如果提取不到返回nil
?*/
- (NSString *)makeCookieValueOfHeaderByCookies:(NSArray *)cookies;
- (NSString *)makeCookieValueOfHeaderByURL:(NSURL *)requrl;
/*
?通過URL清除Cookie
?*/
- (void)deleteCookiesByURL:(NSURL *)requrl;
/*
?所有URL
?*/
- (NSArray *)allURL;
@end
@interface FQWebGlobalCookies()
{
??? NSMutableDictionary???? *cookiesDictionary;
}
@end
@implementation FQWebGlobalCookies
static FQWebGlobalCookies *globalCookiesInstance = nil;
+(id)globalCookiesManager{
??? if (!globalCookiesInstance) {
??????? static dispatch_once_t onceToken;
??????? dispatch_once(&onceToken, ^{
??????????? globalCookiesInstance = [[FQWebGlobalCookies alloc]init];
??????? });
?? ?
??? }
??? return globalCookiesInstance;
}
- (id)init{
??? self = [super init];
??? if (self) {
??????? cookiesDictionary = [[NSMutableDictionary alloc]init];
??? }
??? return self;
}
- (void)dealloc
{
??? cookiesDictionary = nil;
}
/*
?對每份URL產(chǎn)生的Cookie 保存起來,以便管理
?對響應(yīng)頭域中的cookie進(jìn)行保存
?*/
- (void)storeResponseCookies:(NSDictionary *)headerFields forURL:(NSURL *)requrl{
??? @synchronized(cookiesDictionary){
?? ?
??????? NSArray *newCookies = [NSHTTPCookie cookiesWithResponseHeaderFields:headerFields forURL:requrl];
?????? ?
??????? if ([newCookies count] > 0) {
??????????? NSHTTPCookie *cookie;
??????????? NSMutableArray *globalCookies = [[NSMutableArray alloc]init];
??????????? for (cookie in newCookies) {
??????????????? [globalCookies addObject:cookie];
??????????? }
?????????? ?
??????????? // //如果URL相同會把舊的替換掉
??????????? if ([globalCookies count] > 0)
??????????? {
??????????????? [cookiesDictionary setObject:globalCookies forKey:requrl];
??????????? }
?????????? ?
??????????? [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:newCookies forURL:requrl mainDocumentURL:nil];
??????? }
?????? ?
??? }
}
/*
?通過requrl獲取對應(yīng)的cookie
?返回url所有對應(yīng)的cookie
?*/
- (NSArray *)getCookiesByURL:(NSURL *)requrl{
??? NSArray *cookies = nil;
??? @synchronized(self){
??????? cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage]cookiesForURL:[requrl absoluteURL]];
??? }
?? ?
??? return cookies;
?? ?
}
/*
?通過getCookiesByURL提取出的cookies 解釋出可以被請求頭域Cookie使用的字符值
?返回一個供Cookie頭域使用的值,如果提取不到返回nil
?*/
- (NSString *)makeCookieValueOfHeaderByCookies:(NSArray *)cookies{
??? NSString *cookieHeader = nil;
??? @synchronized(self){
??????? if ([cookies count] > 0) {
??????????? NSHTTPCookie *cookie;
??????????? for (cookies in cookies) {
??????????????? if (!cookieHeader) {
???????????????????? cookieHeader = [NSString stringWithFormat:@"%@=%@",[cookie name],[cookie value]];
??????????????? } else{
??????????????? cookieHeader = [NSString stringWithFormat: @"%@; %@=%@",cookieHeader,[cookie name],[cookie value]];
??????????????? }
??????????? }
??????? }
??? }
??? return cookieHeader;
}
- (NSString *)makeCookieValueOfHeaderByURL:(NSURL *)requrl{
??? NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[requrl absoluteURL]];
??? return [self makeCookieValueOfHeaderByCookies:cookies];
?? ?
}
/*
?通過URL清除Cookie
?*/
- (void)deleteCookiesByURL:(NSURL *)requrl{
??? @synchronized(self){
??????? NSArray *cookies = [cookiesDictionary objectForKey:requrl];
??????? for (NSHTTPCookie *cookie in cookies)
??????? {
??????????? [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
??????? }
?????? ?
??????? [cookiesDictionary removeObjectForKey:requrl];
??? }
}
/*
?所有URL
?*/
- (NSArray *)allURL
{
??? NSArray *urls = nil;
??? @synchronized (cookiesDictionary){
??????? urls = [cookiesDictionary allKeys];
??? }
??? return urls ? urls : [NSArray array];
}
@end
總結(jié)
以上是生活随笔為你收集整理的iOS Cookie学习(NSHTTPCookieStorage的使用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3ds Max怎么制作摩洛哥鼹鼠《Mor
- 下一篇: 获取手机信息(UIDevice、NSBu