我需要使用此功能先登录,然后再例如调用一个显示命令的函数,具体取决于登录时使用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/