iOS 中 Cookie的簡單使用

iOS平臺下每一個APP都有自己的Cookie,APP之間不共享Cookie,一個Cookie 對應一個NSHTTPCookie實體,並通過NSHTTPCookieStrorage進行管理。那些需要持久化的Cookie是存放在~/Library/Cookies/Cookies.binarycookies 文件中的二進制格式。

Cookie的生成途徑有兩種,一種是訪問網頁,網頁返回的是HTTP Header 中有 Set-Cookie指令進行Cookie 的設置,這裏Cookie 的本地處理其實是由WebKit 進行的;還有一種途徑就是我們客戶端通過手動設置的Cookie。

   NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
    [cookieProperties setObject:@"name" forKey:NSHTTPCookieName];
    [cookieProperties setObject:@"value" forKey:NSHTTPCookieValue];
    [cookieProperties setObject:@"www.baidu.com" forKey:NSHTTPCookieDomain];
    [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
    [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
    [cookieProperties setObject:@"30000" forKey:NSHTTPCookieMaximumAge];
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
    //[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];


在通過SetCookie:進行設置Cookie的時候,會覆蓋name,domain,path都相同的cookie的。對於cookie會不會持久化到cookie文件中主要看這個cookie的生命週期,和Max-Age或者 Expires 有關。

其實,NSHTTPCookieStorage 存在一個問題,那就是SetCookie或者DeleCookie後並不會立即進行持久化,而是有幾秒鐘的延遲。如果在持久化未完成之前APP收到了SIGLKILL 的信號,APP 退出,那麼就會導致cookie 相關的操作的丟失。在模擬器調試的時候,Xcode重啓模擬器的時候會發給APP 的就是 SIGKILL,不過真正的生產環境中很少有這種情況。不過有時候爲了可靠性,我們還是會將cookie 的信息保存一份到User Defaults中的,需要的時候再load進來。

發佈了84 篇原創文章 · 獲贊 23 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章