gpt4 book ai didi

objective-c - 如何在 objective-c 中维护 session ?

转载 作者:太空狗 更新时间:2023-10-30 03:59:06 28 4
gpt4 key购买 nike

所以我遇到了以下问题:

我有一个登录 View Controller 和一个表单 View Controller 。在登录 View Controller 上,我向 PHP 脚本发送一个 POST 请求,该脚本验证用户是否具有访问权限。该脚本只返回 1 或 0。因此我可以选择关闭或维护 View Controller 。当凭据正确传递时,用户将看到表单 Controller 。这个 Controller 有一个按钮来获取表单。

获取表单的按钮向另一个 PHP 脚本发出 POST 请求,该脚本将返回包含用户值的 XML 文档。我需要一种方法来记住用户通过的用户名和密码。所以我可以在另一个( View ) Controller 中使用它们。

有人知道实现这个的方法吗?

最佳答案

如果您正在使用 NSURLConnection,并且 session 是基于 cookie 的,这将自动完成。因此,您需要编写的所有内容都与此类似

NSMutableURLRequest *request = nil;
request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://server.com/login.php"]];

NSString *post = [NSString stringWithFormat:@"username=%@&password=%@", @"<username>", @"<password>"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
[request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"];
[request setTimeoutInterval: 15];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];

_urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[_urlConnection start];

而且你还必须实现 NSURLConnectionDelegate 方法

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[_responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
//Oops! handle failure here
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (_statusCode >= 200 && _statusCode < 400) {
//Things look ok
NSString *responseString = [[[NSString alloc] initWithData:_responseData] autorelease];
//Send this to an xml lib and parse
}

[_responseData release];
_responseData = nil;
[connection autorelease];
}

如果您在 header 中有一些其他信息并且需要随后续请求发回,您可以像这样从响应中读取它

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSDictionary *headerFields = [(NSHTTPURLResponse*)response allHeaderFields]; //This would give you all the header fields;
}
}

然后像这样设置下一个请求的头域

    [request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"];

要保存信息,无论是用户名和/或密码还是 session 信息,您都可以使用 NSUserDefaults

    //To save
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
[standardUserDefaults setObject:@"<username>" forKey:@"username"];
[standardUserDefaults setObject:@"<pass>" forKey:@"password"];
[standardUserDefaults synchronize];
}

//To retrieve
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *val = nil;

if (standardUserDefaults)
val = [standardUserDefaults objectForKey:@"username"];

最后,建议构建一个模型来映射 xml API 与 [例如:具有用户名和密码属性的用户类]。

Google for Apple 关于 MVC 的文档。

希望这对您有所帮助!

关于objective-c - 如何在 objective-c 中维护 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7038677/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com