我是一个完整的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];
答案 0 :(得分:0)
好吧,似乎一切都从一开始就是正确的。 我的服务器的网站在Code Igniter上运行,它具有在用户代理已更改时销毁会话的设置。这导致我的api端点的每个帖子都会退出。
失去3天寻找,我希望我已经测试了一个测试服务器的帖子:S
这篇文章解释了很多: http://mirkules.com/blog/asihttprequest-vs-nsurlrequest/
***刚刚注意到Leijonien的回答(评论)从一开始就朝着正确的方向发展......