在web開發中,我們經常會利用Cookies跟蹤記錄一些用戶信息,比如登陸產生的token,用戶的一些偏好設置等。在iOS中也是一樣,可以利用Cookies記錄用戶的一些選擇或設置,比如:用戶選擇某個感興趣的行業,他希望下次他再次打開app的時候能夠直接看到該行業相關的資訊,這時候就可以利用Cookies記錄用戶的選擇,如圖:
利用Cookies記錄用戶選擇
industry_cat代表用戶選擇的感興趣的行業,客戶端發出請求的時候會自動將Cookies帶上,這樣做的好處很明顯,不需要接口做額外的改動,譬如增加一個代表行業的字段。我們只需要保證Cookies存在且它沒有過期。不過這里要注意和web瀏覽器不一樣的地方是:iOS中,應用退出,會話結束的時候,Cookies是默認被丟棄的,而瀏覽器默認是保存的。所以我們還需要對Cookies做一些簡單的操作:
NSHTTPCookieStorage* cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray<NSHTTPCookie *> *cookies = [cookieStorage cookiesForURL:[NSURL URLWithString:baseUrl]];
NSMutableArray<NSDictionary *> *propertiesList = [[NSMutableArray alloc] init];
[cookies enumerateObjectsUsingBlock:^(NSHTTPCookie * _Nonnull cookie, NSUInteger idx, BOOL * _Nonnull stop) {
NSMutableDictionary *properties = [[cookie properties] mutableCopy];
//將cookie過期時間設置為一年后
NSDate *expiresDate = [NSDate dateWithTimeIntervalSinceNow:3600*24*30*12];
properties[NSHTTPCookieExpires] = expiresDate;
//下面一行是關鍵,刪除Cookies的discard字段,應用退出,會話結束的時候繼續保留Cookies
[properties removeObjectForKey:NSHTTPCookieDiscard];
//重新設置改動后的Cookies
[cookieStorage setCookie:[NSHTTPCookie cookieWithProperties:properties]];
}];
這樣即達到我們的目的了。