美文网首页
什么是cookie,使用正确的姿势在app中种植cookie

什么是cookie,使用正确的姿势在app中种植cookie

作者: 风了个1 | 来源:发表于2019-03-22 15:53 被阅读0次

Cookie定义

百度百科是这么定义Cookie的,Cookie指某些网站为了辨别用户身份、进行 session跟踪而储存在用户本地终端上的数据。在前端开发识别用户身份的流程如下:

  1. 用户登录成功,获取token,保存token 到本地,同事保存一份token到NSHTTPCookieStorage中,下次在http请求的时候,默认httpRequest对象会默认带上NSHTTPCookieStorage中保存的cookie
  2. 用户在登录成功后,服务端会把cookie设置在NSHTTPURLResponse,客户端不需要重新设置cookie,只需要读取NSHTTPURLResponse中的cookie值然后保存在本地用户记录用户的登录状态

Cookie的作者

  1. 服务端
  2. 客户端(原生app,h5,pc)

Cookie的基本使用

Cookie相关类

  • NSHTTPCookie:cookie基本类,有以下基本属性:
1. version:版本号
2. name:名称
3. value:值
4. expiresDate:超时时间,注意:一定要设置,不然很可能设置的cookie无效
5. domain:设置的域名
6. path:设置路径,一般根目录设置“/”
7. HTTPOnly:只能用做发送http请求,不能作用于其他用户,保证cookie不被其他的js获取,比如你的页面接入了第三方js,如果这个js是恶意的,可以获取cookie里面的信息,那么很可能拿到用户的私密信息,所以建议使用设置HTTPOnly为YES,一般服务器在设置cookie时,也应该设置HTTPOnly
8. secure:是否只能通过加密连接发送到受信任的服务器(即通过SSL或TLS),不应该被交付给任何服务器,防止跨站点脚本漏洞的javascript应用程序。
  • NSHTTPCookieStorage:保存cookie的单利
    包含了cookie的基本操作,常用的方法有

    1. 设置cookie
      - (void)setCookie:(NSHTTPCookie *)cookie;

    2. 删除cookie
      - (void)deleteCookie:(NSHTTPCookie *)cookie;

    3. 写入Cookie

      NSMutableDictionary *dict = [NSMutableDictionary dictionary];        
      [dict setObject:@".tairanmall.com" forKey:NSHTTPCookieDomain];        
       [dict setObject:@"/" forKey:NSHTTPCookiePath];
      [dict setObject:@"token" forKey:NSHTTPCookieName];
       [dict setObject:@"123" forKey:NSHTTPCookieValue];
      
      // 过期时间为1个月
      [dict setValue:[NSDate dateWithTimeIntervalSinceNow:2592000] forKey:NSHTTPCookieExpires];    
       [dict setObject:@"0" forKey:NSHTTPCookieVersion];    
      NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:dict];    
      

    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
    ```

    1. Cookie的读取
        NSHTTPCookieStorage *cookieStore = [NSHTTPCookieStorage     sharedHTTPCookieStorage];   
    for (NSHTTPCookie *cookie in [cookieStore cookies]) {       
       // 获取指定key的cookie
        if ([cookie.name isEqualToString:name]) {
            
         }
     }
    

在webView中设置cookie

  • UIWebView(早起的webview框架)

    UIWebView设置Cookie与在http请求中添加的Cookie共用一套NSHTTPCookieStorage,所以保证设置一次即可

  • WKWebView

    WKWebView相对于UIWebView,有以下优点

    1. 内存占用是UIWebView的1/4~1/3
    2. 页面加载速度有提升,有的文章说它的加载速度比UIWebView提升了一倍左右
    3. 更为细致地拆分了 UIWebViewDelegate 中的方法
    4. 自带进度条。不需要像UIWebView一样自己做假进度条(通过NJKWebViewProgress和双层代理技术实现),技术复杂度和代码量,根贴近实际加载进度优化好的多
    5. 允许JavaScript的Nitro库加载并使用(UIWebView中限制)
    6. 可以和js直接互调函数,不像UIWebView需要第三方库WebViewJavascriptBridge来协助处理和js的交互。

缺点

  1. Cookie管理很麻烦,不能支持缓存页面Cookie
  2. 同样是由于进程间通信性能问题,HTTPBody字段被丢弃
    [request setHTTPMethod:@"POST"];[request setHTTPBody:[@"bodyData"dataUsingEncoding:NSUTF8StringEncoding]];[wkwebview loadRequest: request];

cookie设置注意项

  1. 必须设置过期时间:否则很容易会设置cookie后立马就会超时
  2. cookie自动丢失的问题:cookie存储在NSHTTPCookieStorage中,NSHTTPCookieStorage会持久化在本地,理论上只要app启动,就可以读取到设置过的cookie,但是偶发性的cookie被丢失,丢失原因不明,有相关资料显示cookie在客户端中五分钟又可能存在丢失的情况,这种情况比较偶发,
  3. cookie内存最大为4k,不要使用过长的cookie的值,设置过多的cookie

相关文章

网友评论

      本文标题:什么是cookie,使用正确的姿势在app中种植cookie

      本文链接:https://www.haomeiwen.com/subject/wslrvqtx.html