iOS平台下cookie的使用
来源:互联网 发布:消防大数据平台 编辑:程序博客网 时间:2024/06/06 03:47
cookie我们在iOS中可以自己管理,也可以直接NSHTTPCookieStorage管理
根据Cookies的三个基本用途,可以把它们分成三类。第一类是跟踪个人用户在特定网站上的交易,以便用户可以开始和终止交易并返回到它正在从事的工作中。Cookies的这种用途是与仅在临时内存中放置而不写入用户硬盘驱动器的Cookies相一致。交易结束后,这种Cookies可以在完成它的任务后消失。这种Cookies可以帮助顾客得到更好的在线服务,并且为交易提供方便。Cookies的第二种用途或第二种Cookies是由网站放置在用户的硬盘驱动器上,以便用户再次反问该网站时,该网站可以识别这个用户。第三类Cookies就是所谓的“第三方Cookies”,它们不是由用户使用的网站放置在用户的硬盘驱动器上的,而是诸如DoubleClick通过使用它的横幅广告,记录用户的浏览历史。而通过这些横幅广告,DoubleClick公司可以出现在11500家广告商放置广告的所有网站上.
首先,先介绍下iOS对cookie的操作的两个类:
帖子来源于:http://blog.csdn.net/chun799/article/details/17206907
1. NSHTTPCookie 2. NSHTTPCookieStorage
NSHTTPCookie对象代表一个HTTP cookie。 这是一个不可改变的对象,从一个包含cookie的属性的字典初始化,这个类可以用来手动创建cookie的Properties 。
- (NSUInteger)version;
- (NSString *)name;
- (NSString *)value;
- (NSString *)domain;
- (NSString *)path;
- (BOOL)isSessionOnly;等等属性,具体属性请自行谷歌
可以通过手工赋值的方式创建Cookie,如
+ (id)cookieWithProperties:(NSDictionary *)properties;
- (id)initWithProperties:(NSDictionary *)properties;
也可以从Cookie中读取到所有属性。
- (NSDictionary *)properties;
使用NSHTTPCookie的类方法可以将NSHTTPCookie实例与HTTP cookie header相互转换.
根据NSHTTPCookie实例数组生成对应的HTTP cookie header
+ (NSDictionary *)requestHeaderFieldsWithCookies:(NSArray *)cookies;
从headerFileds中读取到Cookie相关内容,生成NSHTTPCookie实例对象数组。
+ (NSArray *)cookiesWithResponseHeaderFields:(NSDictionary *)headerFields forURL:(NSURL *)theURL;
该方法会忽略headerFileds中与cookie无关的字段,如果headerFileds中的cookie没有指定domain,则使用theURL的domain,如果没有指定path,则使用”/”.
除非NSURLRequest明确指定不使用cookie(HTTPShouldHandleCookies设为NO),否则URL loading system会自动为NSURLRequest发送合适的存储cookie。从NSURLResponse返回的cookie也会根据当前的cookie访问策略(cookie acceptance policy)接收到系统中。
例如:
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary]; // 创建cookie属性字典
[cookieProperties setObject:@"username" forKey:NSHTTPCookieName]; // 手动设置cookie的属性
[cookieProperties setObject:@"rainbird" forKey:NSHTTPCookieValue];
[cookieProperties setObject:@"cnrainbird.com" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"cnrainbird.com" forKey:NSHTTPCookieOriginURL];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties]; // 通过NSHTTPCookie的cookieWithProperties方法,将属性字典传入进行初始化,对象返回的是一个NSHTTPCookie对象,创建完成后进行下一步操作:
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; // 将手动创建返回的NSHTTPCookie对象添加到NSHTTPCookieStorage中,在iOS中使用NSHTTPCookie类封装一条cookie,通过NSHTTPCookie的方法读取到cookie的通用属性。在此声明一点:如果你的request里面明确不使用cookie,那么要讲cookie的(HTTPShouldHandleCookies设为NO),否则URL loading system会自动为NSURLRequest发送合适的存储cookie。
下面来介绍一下NSHTTPCookieStorage对象:
NSHTTPCookieStorage提供了管理所有NSHTTPCookie 对象的接口在OS X里,cookie是在所有程序中共享的,而在iOS中,cookie只当当前应用中有效。
通过sharedHTTPCookieStorage方法可获取到共享的NSHTTPCookieStorage单件对象。
+ (NSHTTPCookieStorage *)sharedHTTPCookieStorage;
使用NSHTTPCookieStorage单件对象可获取到当前存储的所有cookie
- (NSArray *)cookies
或针对特定URL的cookie
- (NSArray *)cookiesForURL:(NSURL *)theURL;
还可以添加/删除Cookie
– deleteCookie:
– setCookie:
– setCookies:forURL:mainDocumentURL:
通过NSHTTPCookieStorage可读取/修改cookie接收策略,默认为NSHTTPCookieAcceptPolicyAlways.
- (NSHTTPCookieAcceptPolicy)cookieAcceptPolicy;
- (void)setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)aPolicy.
一共有三种cookie accept policy。typedef enum {
NSHTTPCookieAcceptPolicyAlways,
NSHTTPCookieAcceptPolicyNever,
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain
}NSHTTPCookieAcceptPolicy;
NSHTTPCookieAcceptPolicyAlways:接收所有cookie,默认策略.
NSHTTPCookieAcceptPolicyNever: 拒绝所有cookie
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:只接收main document domain中的cookie.
四.相关通知
NSHTTPCookieManagerCookiesChangedNotification
当NSHTTPCookieStorage实例中的cookies变化时发出此通知。
NSHTTPCookieManagerAcceptPolicyChangedNotification
当NSHTTPCookieStorage实例的cookie acceptance policy变化时发出此通知。
参考:
NSHTTPCookieStorage Class Reference
NSHTTPCookie Class Reference
URL Loading System Programming Guide – Cookie Storage
以上是对这两个类的综合介绍,如果有不懂,请自行百度或谷歌。
从网上看了一个自己手动管理cookie的例子:
我这个操作是保存NSHTTPCookieStorage对象里的所有cookie,当然也可以使用cookieForUrl来获取cookie进行保存,方便后续的使用。此操作是在登录的时候进行。
下面:
这个方法就是更新cookie。在程序每次启动的时候调用一下。用来确保每次的cookie是最新的。
然后:
这个方法就是移除你保存的cookie了。因为你在退出账户的时候需要重新获取新的cookie,所以,你需要在退出账户的时候清空你上次保存的cookie. 大概就是这么多操作。
staticNSString*kLocalCookieName =@"MyProjectCookie";
staticNSString*kLocalUserData =@"MyProjectLocalUser";
staticNSString*kServerSessionCookie =@"JSESSIONID";
我们在工程中用的cookie是上方作用中的第二种,
-(void)setCookies{ NSString *cookie_value; NSString *cookie_domain; NSString *cookie_name; NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: [NSURL URLWithString:URL_LOGIN_CENTER]]; NSEnumerator *enumerat = [cookies objectEnumerator]; NSHTTPCookie *cookie; while (cookie = [enumerat nextObject]) { NSLog(@"COOKIE{name: %@, value: %@}", [cookie name], [cookie value]); // if ([[cookie name] isEqualToString:@"XXT_PSPT"]) { cookie_value = [cookie value]; // } cookie_name = [cookie name]; if ([[cookie domain]isEqualToString:@".nmgxxt.cn"]) { cookie_domain = @".xxt.cn"; }else{ cookie_domain = @".nmgxxt.cn"; } } NSLog(@"%@",cookie_value); NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary]; [cookieProperties setObject:cookie_name forKey:NSHTTPCookieName]; [cookieProperties setObject:cookie_value forKey:NSHTTPCookieValue]; [cookieProperties setObject:cookie_domain forKey:NSHTTPCookieDomain]; [cookieProperties setObject:cookie_domain forKey:NSHTTPCookieOriginURL]; [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath]; // [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion]; // [cookieProperties setObject:[NSDate dateWithTimeIntervalSinceNow:60*60] forKey:NSHTTPCookieExpires];//设置失效时间 [cookieProperties setObject:@"1" forKey:NSHTTPCookieDiscard]; //设置sessionOnly NSHTTPCookie *cookieNew = [NSHTTPCookie cookieWithProperties:cookieProperties]; [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookieNew]; }
我们对cookie进行操作,对domain进行设置,以后可以识别是访问哪个。这个cookie不是自己手动操作的,他有自己的存活时间,所以我们在重登陆的时候用的是账号密码,然后成功后还会调用setCookie这个方法进行设置,从而能够再次反访问该网址
- iOS平台下cookie的使用
- iOS平台下cookie的使用
- iOS平台下cookie的使用
- iOS平台下cookie的使用
- iOS平台下cookie实现自动登录
- iOS :Cookie 的使用
- ios cookie的使用
- IOS的cookie的使用
- iOS中的cookie的使用
- iOS里cookie的使用
- iOS中Cookie的使用
- iOS中Cookie的使用
- IOS平台下OpenCV的配置和使用
- 使用Opencv实现IOS平台下的人脸识别
- JQuery下Cookie的使用
- iOS平台下的加密
- ios开发之ASIHTTPRequest-Cookie的使用
- iOS开发ASIHTTPRequest中Cookie的使用
- unity3D学习【功能实现】之四:滚动文字显示,类似公告面板
- 产生N个不重复的随机数的快速算法
- [原创]unity3D学习【功能实现】之五:在图片上显示文字或名字,可更改text mesh
- [原创]unity3D学习【功能实现】之六:延续功能五,血条,点击减血等ugui
- 记一次Linux系统被入侵的排查过程(一)
- iOS平台下cookie的使用
- [原创]unity教程之2048游戏01。
- [原创]unity教程之2048游戏02。
- [原创]unity教程之2048游戏03
- coderforces 702C Cellular Network(二分)
- [原创]unity3D学习【功能实现】之七:Animator动画以及传递参数,简单功能
- 【转载】C#中Dictionary的作用及用…
- unity3D学习【功能实现】之八:对象池学习一
- unity3D学习【功能实现】之八:对象池讲学习二