iOS Cookie学习(NSHTTPCookieStorage的使用)

最近也是忙里偷闲,无意中发现了一位大牛的文章,小小的研究了一下HTTP.今天先写一点Cookie,之前有过文章都是关于Cookie的,也没有深入研究,今天也算是一起学习吧.

@interface FQWebGlobalCookies : NSObject

/*

全局单例

*/

+ (id)globalCookiesManager;

/*

对每份URL产生的Cookie 保存起来,以便管理

对响应头域中的cookie进行保存

*/

- (void)storeResponseCookies:(NSDictionary *)headerFields forURL:(NSURL *)requrl;

/*

通过requrl获取对应的cookie

返回url所有对应的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产生的Cookie 保存起来,以便管理

对响应头域中的cookie进行保存

*/

- (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获取对应的cookie

返回url所有对应的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

iOS Cookie学习(NSHTTPCookieStorage的使用)

时间: 2024-11-16 12:45:59

iOS Cookie学习(NSHTTPCookieStorage的使用)的相关文章

开源中国iOS客户端学习

开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html 开源中国iOS客户端学习——序 说到这款开源软件就得提到她的娘家了--开源中国社区: 开源中国社区简介:开源中国 www.oschina.net 成立于2008年8月,是目前中国最大的开源技术社区.传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现.使用.并交流开源技术的平台.目前开源中国社区已收

ios学习笔记---ios完整学习路线

ios完整学习路线

ios开发学习资料总汇

ios开发学习资料总汇 下面是收集的一些学习资料. 1.唐巧精心整理了国内40多位iOS开发博主的博客地址列表 2.ios常见加密: 链接: http://pan.baidu.com/s/1eQTGFIE 密码: p8ay 3.

【iOS知识学习】_iOS动态改变TableView Cell高度

在做tableView的时候,我们有时候需要根据cell的高度动态来调整,最近在网上看到一段代码不错,跟大家Share一下. 在 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 类中获取cell的高度: CGSize boundSize = CGSizeMake(216, CGFLOAT_MAX); cell.textLabel.text

IOS开发学习笔记-(2)键盘控制,键盘类型设置,alert 对话框

一.关闭键盘,放弃第一响应者,处理思路有两种 ① 使用文本框的 Did End on Exit 绑定事件 ② UIControl on Touch 事件 都去操作 sender 的  resignFirstResponder #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *txtUserName; @pro

Cookie学习-------介绍

什么是 Cookie? Cookie是存储于访问者计算机中的变量. Cookie是Web服务器保存在用户计算机上等的文本文件的小块用户信息,每当用户访问Web服务器时,保存在用户计算机上的相关Cookie由客户端读取到服务器端,服务器端根据Cookie信息为用户制定服务. 例如:访问某个网站时在页面中体现用户登录次数等. Cookie的语法 set-Cookie:name=value;[exprise=date];[path=dir];[domain=domainname];[secure] C

ios网络学习------11 原生API文件上传之断点续传思路

#import "MainViewController.h" @interface MainViewController () @end @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; //下载文件 [self download]; } -(void)download { //1. NSURL NSURL *url = [NSURL URLWithString:@"ht

ios网络学习------8 xml格式数据的请求处理 用代码块封装

#pragma mark 加载xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从web服务器加载数据 NSString *str = @"http://www.baidu.com?format=xml"; //这里是乱写的 //1简历NSURL NSURL *url = [NSURL URLWithString:str]; //2建立NSURLRequest NSURLRequest *request =

iOS手势学习UIGestureRecognizer &amp; cocos2d 手势推荐

iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer  // 长按UIPanGestureRecognizer  // 慢速拖动UIPinchGestureRecognizer  // 两指向內或向外拨动UIRotationGestureRecognizer   // 旋转UISwipeGestureRecognizer   // 快速滑动UITapGestureRecognizer   //