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的使用)相关推荐
- 开源中国iOS客户端学习
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
- ios开发学习-手势交互(Gesture)效果源码分享
qianqianlianmeng ios开发学习-手势交互(Gesture)效果源码分享 All Around Pull View 介绍:实现视图四个方向(上下左右)都能够拖动更新(pull to r ...
- ios开发学习笔记--Core Motion
iOS开发学习笔记之CoreMotion-运动传感器 官网文档:CoreMotion Framework Reference 一. 简介 现在的苹果手机都基本有运动传感器,能够过获取到设备的加 ...
- Cookie 学习案例之三天免登录
Cookie 问题:HTTP 协议是没有记忆功能的,一次请求结束后,相关数据会被销毁.如果第二次的请求需要使用相同的请求数据怎么办呢?难道是让用户再次请求书写吗? 解决:使用 Cookie 技术 解释 ...
- ios网络学习------4 UIWebView的加载本地数据的三种方式
ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...
- IOS之学习笔记十五(协议和委托的使用)
1.协议和委托的使用 1).协议可以看下我的这篇博客 IOS之学习笔记十四(协议的定义和实现) https://blog.csdn.net/u011068702/article/details/809 ...
- 开源中国iOS客户端学习——(八)网络通信AFNetworking类库
AFNetworking是一个轻量级的iOS网络通信类库,继ASI类库不在更新之后开发者们有一套不错选择: AFNetworking类库×××和使用教程: https://github.com/AFN ...
- iOS手势学习UIGestureRecognizer cocos2d 手势推荐
iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer // 长按 UIPanGestu ...
- IOS开发学习笔记-----UILabel 详解
IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...
最新文章
- docker一:mac入门安装
- python流程控制-python简单流程控制
- linux下根据进程查找文件启动文件
- 【公告】百度应用开放平台关于工具/生活类应用优化展现试验的公告
- Qt中事件循环机制详解
- joi模块验证日期格式_python datetime模块详解
- 在Windows 7 Ultimate 64位上安装Java
- 数据库设计 表和表之间的三种关系
- esp32的MQTT物联网开发记录
- android hid 触摸屏驱动,针对USB接口触摸屏HID免驱触摸屏配置方法
- VUE之多元素组件过渡+动画封装
- 设置PPT幻灯版自动翻页播放
- Google将IP标记为中国,影响表现以及解决方案
- 圭尔夫大学计算机科学硕士,加拿大硕士生物医学专业介绍:圭尔夫大学
- 做自媒体视频剪辑为什么赚不到钱?
- UpdateData()函数用法
- PHP单例模式(Singleton Pattern)
- StreamUtil
- Three.js-材质纹理详解
- vc830l 说明书_数字万用表vc830l视频教程 视频
热门文章
- 腾讯地图api_数据库API接口的类型及应用场景
- mysql优化参数设置_MySQL服务优化参数设置参考
- 安卓键盘加上数字_Android自定义键盘的实现(数字键盘和字母键盘)
- node获取图片路径_使用软连接来解决 Drupal jsonapi 中 Node 节点图片相对路径的问题...
- dnn神经网络_机器学习-浅谈神经网络和Keras的应用
- 22(2)序列化以及反序列化
- [Swift]LeetCode732. 我的日程安排表 III | My Calendar III
- C# ref跟out
- HDU4417 Super Mario 主席树
- 【2017-02-19】数据类型、类型转换、常量、变量、转义符。