AFNetworking和UIWebView之间的共享会话 [英] Sharing session between AFNetworking and UIWebView

查看:130
本文介绍了AFNetworking和UIWebView之间的共享会话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以与UIWebView共享 AFNetworking 会话?我使用 AFNetworking 登录到远程服务器,但是UIWebView不知道 AFNetworking 创建的会话是什么?

Is it possible to share AFNetworking session with UIWebView? I used AFNetworking to login to remote server, but the UIWebView have no idea about the session being created by AFNetworking?

推荐答案

实际上,是 AFNetworking UIWebView 共享相同的cookie存储。因此,我们不需要任何特殊技术就可以让 UIWebView 共享由 AFNetworking 初始化的会话,或者任何本地基于会话的请求,该请求使用 NSHTTPCookieStorage 存储cookie。在我的情况下, UIWebView 认为共享会话没有用,只是因为缺少 AFNetworking 初始化的会话

Actually, AFNetworking and UIWebView share the same cookies storage. So we don't need any special technique to let UIWebView "share" a session initialized by AFNetworking, or any native session-based request which uses NSHTTPCookieStorage to store cookie. In my situation, the UIWebView did not find shared session to be useful, just because the session initialized by AFNetworking has lacked of a cookie which was sent only when browsing the site with a browser.

这是我为解决该问题所做的事情:

And here is what I did to solve the problem:

// Open a request to remote server with a User-Agent string set to the request header.
// We'll have browser-specific cookies in NSHTTPCookieStorage
NSString *userAgent = @"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager.requestSerializer setValue:userAgent forHTTPHeaderField:@"User-Agent"];
[manager GET:kRemoteServerUrl parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSLog(@"Done");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"Failure");
}];

上面的代码将确保我们在NSHTTPCookieStorage中具有所有特定于浏览器的cookie,因此让 UIWebView 共享由本机登录例程初始化的任何会话。

Above code will ensure that we have all browser-specific cookies in NSHTTPCookieStorage, hence let the UIWebView share any session initialized by native login routine.

这篇关于AFNetworking和UIWebView之间的共享会话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆