日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS Cookie学习(NSHTTPCookieStorage的使用)

發(fā)布時間:2023/12/15 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS Cookie学习(NSHTTPCookieStorage的使用) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近也是忙里偷閑,無意中發(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。