应用场景: 因为Http会话是无状态的,为使c-s交互相互记录用户状态信息,所以client断就有了cookie, server端有了session。与server 进行集成时,在header里经常有增加session_id的情形,这个从server返回且存在Http的cookie里。如果不去用这个现有的cookie,则每次都要对 Header[] 进行add session_id操作,繁琐。
上伪代码:
Android:
AsyncHttpClient mClient = new AsyncHttpClient();
PersistentCookieStore cookieStore = new PersistentCookieStore(getApplicationContext());
mClient.setCookieStore(cookieStore);
iOS:
-(void)saveHttpCookie{
NSData *cookies = [NSKeyedArchiver archivedDataWithRootObject:[NSHTTPCookieStorage sharedHTTPCookieStorage].cookies];
[[NSUserDefaults standardUserDefaults] setObject:cookies forKey:@”cookies”];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)loadHttpCookie{
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [self cachedCookiesArray]) {
[cookieStorage setCookie:cookie];
}
}
-(void)clearHttpCookie{
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
for (id cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] delete:cookie];
}
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@”cookies”];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (NSArray *)cachedCookiesArray
{
return [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@”cookies”]];
}
Note:
iOS 官方文档 申明,不同app间不会共享cookie (Cookies are not shared between apps in iOS)
@TODO NSHTTPCookieAcceptPolicy