zoukankan      html  css  js  c++  java
  • ASIHTTPRequest-Cookie的使用

     本文转载至 http://www.cocoachina.com/bbs/read.php?tid=93220&page=e&#a

     
     
    持久化cookie

    ASIHTTPRequest允许你使用全局存储来和所有使用CFNetwork或者NSURLRequest接口的程序共享cookie。

    如果设置useCookiePersistence为YES(默认值),cookie会被存储在共享的 NSHTTPCookieStorage 容器中,并且会自动被其他request重用。值得一提的是,ASIHTTPRequest会向服务器发送其他程序创建的cookie(如果这些cookie对特定request有效的话)。

    你可以清空session期间创建的所有cookie:
    1
        
    [ASIHTTPRequest setSessionCookies:nil];

    这里的‘session cookies’指的是一个session中创建的所有cookie,而非没有过期时间的cookie(即通常所指的会话cookie,这种cookie会在程序结束时被清除)。

    另外,有个方便的函数 clearSession可以清除session期间产生的所有的cookie和缓存的授权数据。 


    自己处理cookie

    如果你愿意,你大可以关闭useCookiePersistence,自己来管理某个request的一系列cookie:
    //创建一个cookie
    NSDictionary *properties = [[[NSMutableDictionary alloc] init] autorelease];
    [properties setValue:[@"Test Value" encodedCookieValue] forKey:NSHTTPCookieValue];
    [properties setValue:@"ASIHTTPRequestTestCookie" forKey:NSHTTPCookieName];
    [properties setValue:@".dreamingwish.com" forKey:NSHTTPCookieDomain];
    [properties setValue:[NSDate dateWithTimeIntervalSinceNow:60*60] forKey:NSHTTPCookieExpires];
    [properties setValue:@"/asi-http-request/tests" forKey:NSHTTPCookiePath];
    NSHTTPCookie *cookie = [[[NSHTTPCookie alloc] initWithProperties:properties] autorelease];

    //这个url会返回名为'ASIHTTPRequestTestCookie'的cookie的值
    url = [NSURL URLWithString:@"http://www.dreamingwish.com/"];
    request = [ASIHTTPRequest requestWithURL:url];
    [request setUseCookiePersistence:NO];
    [request setRequestCookies:[NSMutableArray arrayWithObject:cookie]];
    [request startSynchronous];

    //将会打印: I have 'Test Value' as the value of 'ASIHTTPRequestTestCookie'
    NSLog(@"%@",[request responseString]);
     
     
     
    本文转载至 http://www.colabug.com/thread-1051112-1-1.html
    最近项目中要用Cookie来实现登录,之前的项目都是保存的帐号和加密过后的密码,对这块不是很了解。Cookie登录就是判断本地有没有Cookie有的话直接登陆,项目里的一些接口在请求中加上自定义的Cookie。项目使用的是asigttprequest这个开源框架。 
      后台登录的实现需要2个过程,一是保存Cookie,二是上传Cookie。 
      在第一次登录时要保存下Cookie的Token,这个是要需要和后台做好约定的。第一次登录时会返给你后台的Cookie信息, 
      [request responseCookies]方法可以得到Cookie数组的信息, 
      NSDictionary *headers = [request responseHeaders]; 
      NSString *setcookie = [headers objectForKey:@"Set-Cookie"] ; 
    这2个方法可以得到你想要的token.在得到的token字符串中分割时你想要的信息。  这时利用NSUserDefaults把token保存下来。方便后面使用cookie登录。 
      接下来的工作是上传保存下来的cookie,在asihttprequest文档上也有说明。 
      代码如下: 
    1. NSDictionary *properties = [[[NSMutableDictionary alloc] init] autorelease];
    2. [properties setValue:[NSString stringWithFormat:@"%@",[GUserSetting provider].UserCookie] forKey:NSHTTPCookieValue];
    3. [properties setValue:@"SessionId" forKey:NSHTTPCookieName];
    4. [properties setValue:domain forKey:NSHTTPCookieDomain];
    5. [properties setValue:@"/" forKey:NSHTTPCookiePath];
    6. NSHTTPCookie *cookie = [[[NSHTTPCookie alloc] initWithProperties:properties] autorelease];
    7. //NSLog(@"%@",cookie);
    8. [request setRequestCookies:[NSMutableArray arrayWithObject:cookie]];

    这里需要注意的是, 
      NSHTTPCookieName是和服务器约定好的token, 
      NSHTTPCookieValue是你要刚才保存下来的token值, 
      NSHTTPCookieDomain和NSHTTPCookiePath一定要加上,不然会上传不成功的Cookie。 
      在asihttrequest时使用时要把setUseCookiePersistence设为NO; 
      我这样我们在用Cookie登录时只要把把保存下的Cookie上传到服务器就可以正常使用接口了,不会提示未登录。
     
  • 相关阅读:
    以后面试官再问你三次握手和四次挥手,直接把这一篇文章丢给他
    聊聊面试中常问的GC机制
    四面快手、终拿Offer,想告诉你的一些事情
    深入浅出14个Java并发容器
    Dubbo 在 K8s 下的思考
    一文带你深入浅出Spring 事务原理
    如何高效选择一款消息队列?
    当面试官要你介绍一下MQ时,该怎么回答?
    淘宝双11促销背后采用什么架构技术来实现网站的负载均衡
    Android 更改按钮样式 Button Styles
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/3683805.html
Copyright © 2011-2022 走看看