ios - AFNetwork与 session 管理iOS

标签 ios ios7 afnetworking-2

我需要使用此功能先登录,然后再例如调用一个显示命令的函数,具体取决于登录时使用php在服务器上$ _SESSION变量中存储的user_id。

有人可以帮我弄这个吗?登录可以正常工作,但是似乎AFNetworking会删除该会话并且不会将其保留。

提前致谢。

NSURL * baseURL = [NSURL URLWithString:@“ https://example.com/robot/”];
    NSDictionary *参数= @ {@“ eMail”:eMail.text,@“ pass”:password.text};

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];



AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:sessionConfiguration];
[manager initWithBaseURL:baseURL];



manager.responseSerializer = [AFJSONResponseSerializer serializer];


[manager POST:@"iPad.php?action=Login" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
    NSDictionary *json = responseObject;


    NSString *jsonstatus;
    jsonstatus = [json objectForKey:@"status"];


    if ([jsonstatus isEqualToString:@"100"]){
        NSLog(@"logged in");


}

NSURL * baseURL = [NSURL URLWithString:@“ https://example.com/robot/”];
    NSDictionary *参数= @ {@“查询”:@“”};

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];



AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:sessionConfiguration];
[manager initWithBaseURL:baseURL];


manager.responseSerializer = [AFJSONResponseSerializer serializer];


[manager POST:@"iPad.php?action=ShowOrders" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
    NSLog(@"hi");
    NSDictionary *json = responseObject;


    NSString *jsonstatus;
    jsonstatus = [json objectForKey:@"status"];

最佳答案

您的问题是由在第二个代码块中创建一个新的AFHTTPSessionManager对象引起的。您应该为您的应用程序创建一个AFHTTPSessionManager并初始化baseURL。然后,您可以针对同一管理者执行许多事务。

您的第二段代码应该是

[manager POST:@"iPad.php?action=ShowOrders" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"hi");
NSDictionary *json = responseObject;


NSString *jsonstatus;
jsonstatus = [json objectForKey:@"status"];


更新

初始化AFHTTPSessionManager时,您应该解决另一个问题

首先你打电话

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:sessionConfiguration];


然后你打电话

[manager initWithBaseURL:baseURL];


第二次调用将在没有会话配置的情况下重新初始化您的会话管理器。您应该这样调用组合的初始化程序-

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaeURL:baseURL sessionConfiguration:sessionConfiguration];


我还在PHP服务器上进行了一个小测试,配置不当并不能阻止会话正常运行,但是重现您问题的是允许请求完成得太快。您需要确保登录请求已完成,然后再发出下一个请求,否则第二个请求将在新会话中发生,因为AFHTTPSession不会序列化请求-它们是异步执行的。在发出showOrders请求之前,如何确保登录任务已完成?

您可以使用请求队列来确保它们按顺序运行-请参阅此答案-AFNetwork 2.0 Queue with completion block?

关于ios - AFNetwork与 session 管理iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22569457/

相关文章:

jquery - iOS7 中 jQuery Mobile 滑动事件的不稳定行为

ios - 使用TableView中显示的NSURLConnection从服务器获取数据

swift - SWIFT中AFNetworkActivityLogger的级别

ios - 如何使用 AFNetworking 2.0 处理 Parse.com Rest API 错误

ios - tableView.reloadSections(sectionIndex,: . 无)无法正常工作

ios - 根据与设备的距离检测信标

ios - 用于创建可调整大小图像的工具

iphone - 带有自定义 UIActivity 的 UIActivityViewController 将彩色图像显示为灰色

ios - 使用AFNetworking解析JSON

ios - emailBody 中的新行无法快速工作