本文转载至 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上传到服务器就可以正常使用接口了,不会提示未登录。

 

最新文章

  1. JS创建缩略图
  2. Maven-搭建maven web项目
  3. salt stack 工具之一——远程命令
  4. VIM 中鼠标选择不选中行号
  5. Dbvisualizer9.0.6 解决中文乱码
  6. (转)eclipse项目导入到android studio中
  7. Javascript 笔记与总结(2-7)对象
  8. ImageX用来做Windows OEM部署
  9. iOS开发——友盟分享
  10. Hay Points
  11. jdk8新特性之lambda expressions
  12. [POJ] 3020 Antenna Placement(二分图最大匹配)
  13. 2018-2019-2 网络对抗技术 20162329 Exp2 后门原理与实践
  14. 表单相关标签之input标签
  15. cordava打包vue项目成app
  16. SpringMVC学习三
  17. Spring Boot 揭秘与实战 源码分析 - 工作原理剖析
  18. Linq高级应用
  19. helm 替换源的方法
  20. node 文件、文件夹 增删改查

热门文章

  1. OPENDJ的安装图文说明
  2. 新装系统(CentOS7.4)环境初始化配置笔记
  3. 2017.3.31 spring mvc教程(三)拦截器
  4. [GraphQL] Reuse Query Fields with GraphQL Fragments
  5. 9.11排序与查找(一)——给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B。将B合并入A并排序
  6. Node.js 极简入门Helloworld版服务器例子
  7. Android SQLiteDatabase中query、insert、update、delete方法参数说明
  8. 经典的排序算法java实现版
  9. POJ1258 Agri-Net MST最小生成树题解
  10. STL源代码剖析 容器 stl_list.h