From 14440734db36dbe7c605c3614db6beff975bad28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E5=85=8B?= Date: Tue, 2 Apr 2013 16:11:07 +0800 Subject: [PATCH] =?UTF-8?q?cookie=E4=BD=BF=E7=94=A8=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _posts/2013/2013-04-02-ios-cookie.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/_posts/2013/2013-04-02-ios-cookie.md b/_posts/2013/2013-04-02-ios-cookie.md index dc44aa2..fa73df0 100644 --- a/_posts/2013/2013-04-02-ios-cookie.md +++ b/_posts/2013/2013-04-02-ios-cookie.md @@ -15,7 +15,7 @@ tags: 一个Cookie对应一个NSHTTPCookie实体,并通过NSHTTPCookieStorage进行管理。 那些需要持久化的Cookie是存放在 `~/Library/Cookies/Cookies.binarycookies` 文件中的,二进制格式。 -Cookie生成的有两个途径,一个是访问一个网页,这个网页返回的HTTP Header中有Set-Cookie指令进行Cookie的设置;还有一种途径就是客户端通过代码手动设置Cookie。 +Cookie生成的有两个途径,一个是访问一个网页,这个网页返回的HTTP Header中有Set-Cookie指令进行Cookie的设置,这里Cookie的本地处理其实是由WebKit进行的;还有一种途径就是客户端通过代码手动设置Cookie。 NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary]; [cookieProperties setObject:@"name" forKey:NSHTTPCookieName]; @@ -30,3 +30,7 @@ Cookie生成的有两个途径,一个是访问一个网页,这个网页返 在通过`setCookie:`进行设置cookie的时候,会覆盖name,domain,path都相同的cookie的。 至于cookie会不会持久化到cookie文件中主要看这个cookie的生命周期,和Max-Age或者Expires有关。 + +
+不过NSHTTPCookieStorage存在一个问题,setCookie或者deleteCookie后并不会立即进行持久,而是有几秒的延迟。如果在持久化之前App接收到SIGKILL信号,App退出,那么可能会导致cookie相关操作的丢失。在模拟器调试的过程中,如果XCode重启的时候就是发的SIGKILL,不过真正的生产环境中很少有这种情况。 +但是有时候为了看可靠性,我们还是会将cookie信息保存一份到User Defaults,需要用的时候load进来。关于cookie操作丢失的详情可以查看这里[NSHTTPCookieStorage looses cookies on SIGKILL](http://openradar.appspot.com/radar?id=2776403)