详解iOS App开发中Cookie的管理方法

 更新时间:2016年07月08日 09:30:24   作者:珲少  
iOS中主要靠NSHTTPCookieStorage和NSHTTPCookie来管理Cookie,下面我们就来详解iOS App开发中Cookie的管理方法,在最后一部分会单独整理出如何清除Cookie的方法.

一、何为Cookie

Cookie是网站为了便是终端身份,保存在终端本地的用户凭证信息。Cookie中的字段与意义由服务端进行定义。例如,当用户在某个网站进行了登录操作后,服务端会将Cookie信息返回给终端,终端会将这些信息进行保存,在下一次再次访问这个网站时,终端会将保存的Cookie信息一并发送到服务端,服务端根据Cookie信息是否有效来判断此用户是否可以自动登录。

二、iOS中进行Cookie管理的两个类

iOS中进行HTTP网络请求Cookie管理主要由两个类负责,一个类是NSHTTPCookieStorage类,一个是NSHTTPCookie类。

1.NSHTTPCookieStorage

NSHTTPCookieStorage类采用单例的设计模式,其中管理着所有HTTP请求的Cookie信息,常用方法如下:

//获取单例对象
+ (NSHTTPCookieStorage *)sharedHTTPCookieStorage;
//所有Cookie数据数组 其中存放NSHTTPCookie对象
@property (nullable , readonly, copy) NSArray<NSHTTPCookie *> *cookies;
//手动设置一条Cookie数据
- (void)setCookie:(NSHTTPCookie *)cookie;
//删除某条Cookie信息
- (void)deleteCookie:(NSHTTPCookie *)cookie;
//删除某个时间后的所有Cookie信息 iOS8后可用
- (nullable NSArray<NSHTTPCookie *> *)cookiesForURL:(NSURL *)URL;
//获取某个特定URL的所有Cookie数据
- (void)removeCookiesSinceDate:(NSDate *)date NS_AVAILABLE(10_10, 8_0);
//为某个特定的URL设置Cookie
- (void)setCookies:(NSArray<NSHTTPCookie *> *)cookies forURL:(nullable NSURL *)URL mainDocumentURL:(nullable NSURL *)mainDocumentURL;
//Cookie数据的接收协议
/*
枚举如下:
typedef NS_ENUM(NSUInteger, NSHTTPCookieAcceptPolicy) {
    NSHTTPCookieAcceptPolicyAlways,//接收所有Cookie信息
    NSHTTPCookieAcceptPolicyNever,//不接收所有Cookie信息
    NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain//只接收主文档域的Cookie信息
};
*/
@property NSHTTPCookieAcceptPolicy cookieAcceptPolicy;
系统下面的两个通知与Cookie管理有关:

//Cookie数据的接收协议改变时发送的通知
FOUNDATION_EXPORT NSString * const NSHTTPCookieManagerAcceptPolicyChangedNotification;
//管理的Cookie数据发生变化时发送的通知
FOUNDATION_EXPORT NSString * const NSHTTPCookieManagerCookiesChangedNotification;

2.NSHTTPCookie

NSHTTPCookie是具体的HTTP请求Cookie数据对象,其中属性方法如下:

//下面两个方法用于对象的创建和初始化 都是通过字典进行键值设置
- (nullable instancetype)initWithProperties:(NSDictionary<NSString *, id> *)properties;
+ (nullable NSHTTPCookie *)cookieWithProperties:(NSDictionary<NSString *, id> *)properties;
//返回Cookie数据中可用于添加HTTP头字段的字典
+ (NSDictionary<NSString *, NSString *> *)requestHeaderFieldsWithCookies:(NSArray<NSHTTPCookie *> *)cookies;
//从指定的响应头和URL地址中解析出Cookie数据
+ (NSArray<NSHTTPCookie *> *)cookiesWithResponseHeaderFields:(NSDictionary<NSString *, NSString *> *)headerFields forURL:(NSURL *)URL;
//Cookie数据中的属性字典
@property (nullable, readonly, copy) NSDictionary<NSString *, id> *properties;
//请求响应的版本
@property (readonly) NSUInteger version;
//请求相应的名称
@property (readonly, copy) NSString *name;
//请求相应的值
@property (readonly, copy) NSString *value;
//过期时间
@property (nullable, readonly, copy) NSDate *expiresDate;
//请求的域名
@property (readonly, copy) NSString *domain;
//请求的路径
@property (readonly, copy) NSString *path;
//是否是安全传输
@property (readonly, getter=isSecure) BOOL secure;
//是否只发送HTTP的服务
@property (readonly, getter=isHTTPOnly) BOOL HTTPOnly;
//响应的文档
@property (nullable, readonly, copy) NSString *comment;
//相应的文档URL
@property (nullable, readonly, copy) NSURL *commentURL;
//服务端口列表
@property (nullable, readonly, copy) NSArray<NSNumber *> *portList;

三、清除Cookie
清除所有的cookie 方法:

NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; 
    if (url) { 
        NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url]; 
        for (int i = 0; i < [cookies count]; i++) { 
            NSHTTPCookie *cookie = (NSHTTPCookie *)[cookies objectAtIndex:i]; 
            [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; 
             
        }  
  清除某一个特定的cookie方法:
NSArray * cookArray = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:self.loadURL]]; NSString * successCode = @""; for (NSHTTPCookie*cookie in cookArray) { if ([cookie.name isEqualToString:@"cookiename"]) { [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; } } 

清除某一个url缓存的方法:
[[NSURLCache sharedURLCache] removeCachedResponseForRequest:[NSURLRequest requestWithURL:url]]; 

清除所有缓存方法:       
[[NSURLCache sharedURLCache] removeAllCachedResponses]; 

相关文章

  • iOS开发中Quartz2D的基本使用方式举例

    iOS开发中Quartz2D的基本使用方式举例

    这篇文章主要介绍了iOS开发中Quartz2D的基本使用方式举例,需要的朋友可以参考下
    2015-11-11
  • IOS开发环境windows化攻略

    IOS开发环境windows化攻略

    本人主要介绍了IOS开发环境windows化攻略,需要的朋友可以参考下
    2013-06-06
  • 详解iOS 加载本地HTML,css,js

    详解iOS 加载本地HTML,css,js

    本篇文章主要介绍了详解iOS 加载本地HTML,css,js,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 如何在iOS中高效的加载图片详解

    如何在iOS中高效的加载图片详解

    这篇文章主要给大家介绍了关于如何在iOS中高效的加载图片的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用iOS具有一定的参考学习价值,需要的朋友可以参考下
    2021-10-10
  • iOS开发————详解适配iOS10问题

    iOS开发————详解适配iOS10问题

    ios10已经推出一段时间了,这篇文章主要介绍了iOS开发————详解适配iOS10,有兴趣的可以了解一下。
    2016-12-12
  • iOS实现图片抖动效果

    iOS实现图片抖动效果

    这篇文章主要为大家详细介绍了iOS实现图片抖动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • UITextView实现只允许链接交互不允许选择图片的方法

    UITextView实现只允许链接交互不允许选择图片的方法

    这篇文章主要介绍了UITextView实现只允许链接交互不允许选择图片的方法,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 使用AVFoundation实现视频录制详解

    使用AVFoundation实现视频录制详解

    这篇文章主要介绍了使用AVFoundation实现视频录制详解的相关资料,需要的朋友可以参考下
    2022-09-09
  • iOS中日志同步获取NSLog重定向以及其他详解

    iOS中日志同步获取NSLog重定向以及其他详解

    在Objective-c开发程序的时候,有专门的日志操作类NSLog,它将指定的输出,输出到(stderr),我们可以利用Xcode的日志输出窗口,下面这篇文章主要给大家介绍了关于iOS中日志同步获取NSLog重定向以及其他的相关资料,需要的朋友可以参考下。
    2017-12-12
  • 详解在iOS App中自定义和隐藏状态栏的方法

    详解在iOS App中自定义和隐藏状态栏的方法

    这篇文章主要介绍了在iOS App中自定义和隐藏状态栏的方法,在顶部时某些状况下即用应用内的状态栏覆盖系统本身的,代码示例为Objective-C语言,需要的朋友可以参考下
    2016-03-03

最新评论