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进来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值