在委托中执行NSURLConnection后丢失身份验证

时间:2013-11-17 21:32:35

标签: ios objective-c nsurlconnection

我是一个完整的n00b与Obj-C,我坚持这个简单的事情几个小时。 我使用UIWebView加载要求输入用户名和密码的页面。当我成功登录时,我的服务器向我发送了一个带有我想要发布到PHP脚本的ID的cookie,以便将其存储在db中。

登录成功后,我会被重定向到新网址。

我可以读取cookie值并将POST请求发送到相应的脚本(来自我的WebView委托),但这样做会使我的登录失效,而我的页面再次要求我输入密码。

这是完全错误的做法吗?对此有何帮助?

[NSURLConnection connectionWithRequest:request delegate:self];

这是我在会话失效之前运行的代码行。如果我从ViewController内部调用它,它工作正常,但我需要它只在我在特定网址(登录后)后运行,这就是为什么我把它放在委托中。

完整(杂乱)代码如下。

 NSURL *url = [NSURL URLWithString:@"https://www.example.com/api/register”];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];


    NSHTTPCookie *cookie;
    NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    NSString *userid;

    for (cookie in [cookieJar cookies]) {

        if ([cookie.name  isEqual: @“cookie_user_id"]) {
            userid = cookie.value;
            NSLog(@"%@",cookie);

        }

    }


    NSString *getToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"DEVICE_TOKEN"];
    NSString *user_id = [NSString stringWithFormat:@"user_id=%@", userid];
    NSString *dtk = [NSString stringWithFormat:@"&token=%@",getToken];
    NSString *params = [NSString stringWithFormat: @"%@ %@", user_id, dtk];


    NSData *requestData = [params dataUsingEncoding:NSUTF8StringEncoding];

    [request setHTTPMethod:@"POST"];
    [request setValue:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[requestData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: requestData];


    [NSURLConnection connectionWithRequest:request delegate:self];

1 个答案:

答案 0 :(得分:0)

好吧,似乎一切都从一开始就是正确的。 我的服务器的网站在Code Igniter上运行,它具有在用户代理已更改时销毁会话的设置。这导致我的api端点的每个帖子都会退出。

失去3天寻找,我希望我已经测试了一个测试服务器的帖子:S

这篇文章解释了很多: http://mirkules.com/blog/asihttprequest-vs-nsurlrequest/

***刚刚注意到Leijonien的回答(评论)从一开始就朝着正确的方向发展......