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后可用

- (void)removeCookiesSinceDate:(NSDate *)date NS_AVAILABLE(10_10, 8_0);

//获取某个特定URL的所有Cookie数据

- (nullable NSArray<NSHTTPCookie *> *)cookiesForURL:(NSURL *)URL;

//为某个特定的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]; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值