国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - 詳解iOS App開發(fā)中session和coockie的用戶數(shù)據(jù)存儲處理

詳解iOS App開發(fā)中session和coockie的用戶數(shù)據(jù)存儲處理

2021-01-21 15:13琿少 IOS

iOS在HTTP網(wǎng)絡(luò)編程環(huán)境方面提供了NSURLSession、NSHTTPCookieStorage和NSHTTPCookie類來處理session和coockie的相關(guān)內(nèi)容,接下來我們將來詳解iOS App開發(fā)中session和coockie的用戶數(shù)據(jù)存儲處理:

NSURLSession
在iOS7之后,NSURLSession作為系統(tǒng)推薦使用的HTTP請求框架,在進行前臺請求的情況下,NSURLSession與NSURLConnection并無太大差異,對于后臺的請求,NSURLSession更加靈活的優(yōu)勢就將展現(xiàn)無遺。
1.NSURLSession集合的類型

NSURLSession類提供3中Session類型:

(1)Default類型:提供前臺請求相關(guān)方法,支持配置緩存,身份憑證等。

(2)Ephemeral類型:即時的請求類型,不使用緩存,身份憑證等。

(3)Background:后臺類型,支持在后臺完成請求任務。

2.NSURLSession任務的類型

在NSURLSession中添加的請求任務支持3中類型:

(1)數(shù)據(jù)任務:使用NSData對象進行數(shù)據(jù)的發(fā)送和獲取,一般用于短數(shù)據(jù)的任務。

(2)下載任務:從文件下載數(shù)據(jù),支持后臺下載。

(3)上傳任務:以文件的形式上傳數(shù)據(jù),支持后臺上傳。

3.創(chuàng)建并配置NSURLSession:

通過NSURLSessionConfiguration類對象對NSURLSession進行配置與創(chuàng)建,創(chuàng)建和配NSURLSession的示例代碼如下:

    //默認類型的
    NSURLSessionConfiguration * defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    //即時類型的
    NSURLSessionConfiguration * ephemeralConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
    //后臺類型的
    NSURLSessionConfiguration * backgroundConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"SessionId"];
   
    //創(chuàng)建并設(shè)置session
    NSURLSession * defaultSession = [NSURLSession sessionWithConfiguration:defaultConfiguration];
    NSURLSession * ephemeralSession = [NSURLSession sessionWithConfiguration:ephemeralConfiguration];
    NSURLSession * backgroundSession = [NSURLSession sessionWithConfiguration:backgroundConfiguration];

NSURLSessionConfiguration還可以配置如緩存,網(wǎng)絡(luò)模式等參數(shù)

4.使用NSURLSession進行網(wǎng)絡(luò)請求的兩種方式

NSURLSession有兩種方式進行網(wǎng)絡(luò)數(shù)據(jù)的請求,一種是通過block的方式獲取網(wǎng)絡(luò)數(shù)據(jù),一種是通過代理回調(diào)的方式獲取網(wǎng)絡(luò)數(shù)據(jù)。通過block的方式進行請求代碼如下:

    //創(chuàng)建session配置對象
    NSURLSessionConfiguration * defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    //創(chuàng)建請求對象
    NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    //創(chuàng)建session對象
    NSURLSession * defaultSession = [NSURLSession sessionWithConfiguration:defaultConfiguration];
    //添加任務
    NSURLSessionTask * task= [defaultSession dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSLog(@"%@",data);
    }];
    //開始任務
    [task resume];

使用代理回調(diào)的方式進行請求需要遵守如下協(xié)議:

@interface ViewController ()<NSURLSessionDataDelegate>
@end

將請求代碼修改如下:

    NSURLSessionConfiguration * defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    NSURLSession * defaultSession = [NSURLSession sessionWithConfiguration:defaultConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]];

    NSURLSessionTask * task= [defaultSession dataTaskWithRequest:request];
    [task resume];

實現(xiàn)代理方法如下:

//開始接受數(shù)據(jù)
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data{
    NSLog(@"=======%@",data);
}
//接受數(shù)據(jù)結(jié)束
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
    NSLog(@"完成:error%@",error);
}

5.進行后臺下載任務

NSURLSession最大的優(yōu)勢在于其后臺下載的靈活性,使用如下的代碼進行后臺數(shù)據(jù)下載:

 NSURLSessionConfiguration * backgroundConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.zyprosoft.backgroundsession"];
    NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    NSURLSession *  backgroundSession   = [NSURLSession sessionWithConfiguration:backgroundConfiguration delegate:self delegateQueue:nil];
    [[backgroundSession downloadTaskWithRequest:request]resume];

在下面的回調(diào)方法中可以進行下載進度的監(jiān)聽:

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
    NSLog(@"######");
}

如果在下載過程中點擊Home鍵使應用程序進入后臺,NSURLSession的相關(guān)代理方法將不再被回調(diào),但是下載任務依然在進行,當后臺下載完成后會與AppDelegate進行交互,會調(diào)用AppDelegate中的如下方法:

-(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler{
    NSLog(@"1111");
}

之后應用程序在后臺會調(diào)用NSURLSesstion代理的如下方法來通知下載結(jié)果:

//此方法無論成功失敗都會調(diào)用
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
    NSLog(@"完成:error%@",error);
}
//此方法只有下載成功才會調(diào)用 文件放在location位置
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
   
}

最后將調(diào)用NSURLSesstion的如下方法:

-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
{
   
    NSLog(@"All tasks are finished");
   
}

 

Cookie

Cookie是網(wǎng)站為了便是終端身份,保存在終端本地的用戶憑證信息。Cookie中的字段與意義由服務端進行定義。例如,當用戶在某個網(wǎng)站進行了登錄操作后,服務端會將Cookie信息返回給終端,終端會將這些信息進行保存,在下一次再次訪問這個網(wǎng)站時,終端會將保存的Cookie信息一并發(fā)送到服務端,服務端根據(jù)Cookie信息是否有效來判斷此用戶是否可以自動登錄。

iOS中進行Cookie管理的兩個類:

iOS中進行HTTP網(wǎng)絡(luò)請求Cookie管理主要由兩個類負責,一個類是NSHTTPCookieStorage類,一個是NSHTTPCookie類。

1.NSHTTPCookieStorage

NSHTTPCookieStorage類采用單例的設(shè)計模式,其中管理著所有HTTP請求的Cookie信息,常用方法如下:

//獲取單例對象
+ (NSHTTPCookieStorage *)sharedHTTPCookieStorage;
//所有Cookie數(shù)據(jù)數(shù)組 其中存放NSHTTPCookie對象
@property (nullable , readonly, copy) NSArray<NSHTTPCookie *> *cookies;
//手動設(shè)置一條Cookie數(shù)據(jù)
- (void)setCookie:(NSHTTPCookie *)cookie;
//刪除某條Cookie信息
- (void)deleteCookie:(NSHTTPCookie *)cookie;
//刪除某個時間后的所有Cookie信息 iOS8后可用
- (nullable NSArray<NSHTTPCookie *> *)cookiesForURL:(NSURL *)URL;
//獲取某個特定URL的所有Cookie數(shù)據(jù)
- (void)removeCookiesSinceDate:(NSDate *)date NS_AVAILABLE(10_10, 8_0);
//為某個特定的URL設(shè)置Cookie
- (void)setCookies:(NSArray<NSHTTPCookie *> *)cookies forURL:(nullable NSURL *)URL mainDocumentURL:(nullable NSURL *)mainDocumentURL;
//Cookie數(shù)據(jù)的接收協(xié)議
/*
枚舉如下:
typedef NS_ENUM(NSUInteger, NSHTTPCookieAcceptPolicy) {
    NSHTTPCookieAcceptPolicyAlways,//接收所有Cookie信息
    NSHTTPCookieAcceptPolicyNever,//不接收所有Cookie信息
    NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain//只接收主文檔域的Cookie信息
};
*/
@property NSHTTPCookieAcceptPolicy cookieAcceptPolicy;
系統(tǒng)下面的兩個通知與Cookie管理有關(guān):

//Cookie數(shù)據(jù)的接收協(xié)議改變時發(fā)送的通知
FOUNDATION_EXPORT NSString * const NSHTTPCookieManagerAcceptPolicyChangedNotification;
//管理的Cookie數(shù)據(jù)發(fā)生變化時發(fā)送的通知
FOUNDATION_EXPORT NSString * const NSHTTPCookieManagerCookiesChangedNotification;

2.NSHTTPCookie

NSHTTPCookie是具體的HTTP請求Cookie數(shù)據(jù)對象,其中屬性方法如下:

//下面兩個方法用于對象的創(chuàng)建和初始化 都是通過字典進行鍵值設(shè)置
- (nullable instancetype)initWithProperties:(NSDictionary<NSString *, id> *)properties;
+ (nullable NSHTTPCookie *)cookieWithProperties:(NSDictionary<NSString *, id> *)properties;
//返回Cookie數(shù)據(jù)中可用于添加HTTP頭字段的字典
+ (NSDictionary<NSString *, NSString *> *)requestHeaderFieldsWithCookies:(NSArray<NSHTTPCookie *> *)cookies;
//從指定的響應頭和URL地址中解析出Cookie數(shù)據(jù)
+ (NSArray<NSHTTPCookie *> *)cookiesWithResponseHeaderFields:(NSDictionary<NSString *, NSString *> *)headerFields forURL:(NSURL *)URL;
//Cookie數(shù)據(jù)中的屬性字典
@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;
//是否只發(fā)送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;

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美午夜精品久久久久久浪潮 | 国产福利视频在线观看 | 日韩福利二区 | 亚洲精品乱码久久久久久金桔影视 | 精品一区免费 | 拍真实国产伦偷精品 | 久久久久久久久久久国产 | 亚洲精品国产一区 | 国产一区亚洲 | av一区二区在线观看 | 日韩精品一区二区三区中文在线 | 国产综合区 | 日韩色综合 | 国产二区三区 | 久久精品国产一区二区三区不卡 | 日韩a∨精品日韩在线观看 国产高清视频在线观看 | 中文字幕日韩在线 | 日韩免费在线观看视频 | caoporn最新地址 | 99久久婷婷国产综合精品电影 | 久久久久久久久久久精 | 久久精品无码一区二区三区 | 日韩电影免费在线观看 | 久久久久久久久久久久福利 | 伊人伊人网 | 成人久久久精品乱码一区二区三区 | 黄色毛片在线 | 免费的av网站 | 日韩电影中文字幕 | 欧美精品欧美精品系列 | 国产高清一级片 | 成人在线视频网 | 欧美电影一区 | 中文字幕观看 | 亚洲一区在线观看视频 | 日韩免费电影 | 国产一区二区三区久久 | 久久91久久久久麻豆精品 | 一级一毛片 | 中文在线一区二区 | 国产精品视频一二三区 |