iOSHttp获取cookie的两种形式

作者: SevenM | 来源:发表于2016-11-18 21:26 被阅读2737次

事情的原因是公司项目需要做cookie做权限验证,经过就是四处的找资料,结果就是各种的坑,最后成功的解决了问题

因为没有做过cookie方面的验证,所以开始的时候找到了一些资料

第一种:::::::::::::::::::::

http://blog.csdn.net/kevindongkun/article/details/50728145原文在这里代码我就直接复制过来了

(1).cookie 的获取与保存

//请求一个网址,即可分配到cookie

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

manager.responseSerializer = [AFJSONResponseSerializernew];

[manager GET:urlString parameters:dicsuccess:^(AFHTTPRequestOperation *operation,idresponseObject) {

//获取cookie

NSArray*cookies = [[NSHTTPCookieStoragesharedHTTPCookieStorage] cookies];

//把cookie进行归档并转换为NSData类型

NSData*cookiesData = [NSKeyedArchiverarchivedDataWithRootObject:cookies];

//存储归档后的cookie

NSUserDefaults*userDefaults = [NSUserDefaultsstandardUserDefaults];

[userDefaults setObject: cookiesData forKey:@"cookie"];

} failure:^(AFHTTPRequestOperation *operation,NSError*error) {

//请求数据失败

}];

(2).cookie的设置

//取出保存的cookie

NSUserDefaults*userDefaults = [NSUserDefaultsstandardUserDefaults];

//对取出的cookie进行反归档处理

NSArray*cookies = [NSKeyedUnarchiverunarchiveObjectWithData:[userDefaults objectForKey:@"cookie"]];

if(cookies) {

//设置cookie

NSHTTPCookieStorage*cookieStorage = [NSHTTPCookieStoragesharedHTTPCookieStorage];

for(idcookie in cookies) {

[cookieStorage setCookie:(NSHTTPCookie*)cookie];

}

}else{

NSLog(@"cookie设置失败");

}

(3).cookie的删除

把获取到的cookie删除掉,该步骤可以用在注销或者切换账号里

NSHTTPCookieStorage*cookieStorage = [NSHTTPCookieStoragesharedHTTPCookieStorage];

NSArray*cookies = [[NSHTTPCookieStoragesharedHTTPCookieStorage] cookies];

//删除cookie

for(NSHTTPCookie*tempCookie in cookies) {

[cookieStorage deleteCookie:tempCookie];

}

下面是我的swift版的相关代码

获取并存储

letcookieStorage =HTTPCookieStorage.shared

letcookieArray = cookieStorage.cookies

//NSDictionary *dict = [NSHTTPCookie requestHeaderFieldsWithCookies:array]

letdata2 =NSKeyedArchiver.archivedData(withRootObject: cookieArray)

UserDefaults.standard.set(data2, forKey:FC_COOKIE)

添加cookie

letdata =UserDefaults.standard.object(forKey:FC_COOKIE)

ifdata !=nil{

letdata2:NSArray=NSKeyedUnarchiver.unarchiveObject(with: dataas!Data)as!NSArray

forcookieindata2 {

HTTPCookieStorage.shared.setCookie(cookieas!HTTPCookie)

}

}

不知道这个cookie的获取和添加是什么机制我们要求的是在头里面添加cookie做验证,理论上是会覆盖掉追以前的cookie但是结果是我这能打印出来获取的数据就是服务端收到的头里面的 cookie是空的,如果有哪位大神能都解释一下就好了————————======——————————

第二种:::::::::::::::::::::

原文在这里

http://www.jianshu.com/p/e44c345deca5

本人比较懒直接就用作者的图了,希望不要告我侵权,因为我都注明出处了

下面是我的swift版虽然没啥用就是原样模仿了一个

获取

letresponse = take.responseas!HTTPURLResponse

letstr =response.allHeaderFields["Set-Cookie"]

FCUtils.writeUserDefault(value: stras!String, key:"user") //这个是本地的存本地的userdefault

添加到头里

letscook =FCUtils.fetchUserDefaultWithKey(key:"user")

if!scook.isKind(of:NSNull.self) {

Static._shareClient?.requestSerializer.setValue(scookas?String, forHTTPHeaderField:"Cookie")

}

最后的结果就是成功的和服务端对接好,用的是第二种添加到header中,第一种的设置方法还真是不知道原理,希望大神艾特赐教一下

相关文章

  • iOSHttp获取cookie的两种形式

    事情的原因是公司项目需要做cookie做权限验证,经过就是四处的找资料,结果就是各种的坑,最后成功的解决了问题 因...

  • cookie

    //设置cookie //获取cookie //封装cookie调用 以对象的形式获取 //key // 设置有效...

  • Cookie

    设置cookie 获取cookie 封装cookie调用 以对象的形式获取 key 设置有效期:

  • ios WKWebView Cookie

    WKWebView Cookie 加载cookie有两种方式1、使用js注入的形式添加2、使用请求头的形式添加 一...

  • 玩转服务端cookie

    获取服务端cookie 获取客户端cookie 客户端设置cookie 删除cookie cookie策略

  • 读写操作

    获取cookie 删除cookie 写入cookie

  • C#设置Cookie

    设置Cookie 获取Cookie 清除Cookie

  • Flask中cookie的使用

    设置cookie 获取cookie,和删除cookie

  • Js封装函数

    一、Cookie相关 1、获取cookie 2、写入cookie 3、删除cookie 二、URL相关 1、获取u...

  • 获取返回URL

    Java设置Cookie Java获取Cookie Js获取Cookie Java方法调用 Js方法调用

网友评论

    本文标题:iOSHttp获取cookie的两种形式

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