我想制作一款具有loginViewController的iphone应用程序。这段代码是否正确且安全?
-(IBAction)loginPressed:(id)sender{
NSString *usr = [[NSString alloc]init];
NSString *psw = [[NSString alloc]init];
usr = username.text;
psw = password.text;
NSLog(@"%@",usr);
NSLog(@"%@", psw);
NSString *URL = [NSString stringWithFormat:@"http://www.mywebsite.com/loginApp.php?user_name=%@&password=%@", usr, psw];
NSLog(@"%@", URL);
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:URL]];
NSString *Result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if ([Result isEqualToString:@"1"])
{
NSLog(@"logged in");
}else if ([Result isEqualToString:@"2"]){
UIAlertView *WrongCredential = [[UIAlertView alloc]initWithTitle:@"Loggin failed" message:@"sorry, check again your email and password" delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles: nil];
[WrongCredential show];
}
}
loginApp.php
<?php
require_once 'functions/init.php';
if (isset($_GET['user_name'], $_GET['password'])){
$email = sanitize($_GET['user_name']);
$password = sanitize($_GET['password']);
$login = loginApp($email, $password);
if($login === true){
echo json_encode(1);
}
else if($login === false){
echo json_encode(2);
}
}
?>
如何检查用户是否已登录?在php我可能会设置一个session / cookies(?),对吗?如何使用Objective C进行操作?
答案 0 :(得分:2)
NSString *usr = [[NSString alloc]init];
NSString *psw = [[NSString alloc]init];
usr = username.text;
psw = password.text;
这段代码会造成内存泄漏。您不必分配字符串并从标签中检索它,只需将其替换为:
NSString* usr = username.text;
NSString* psw = password.text;
然后,您将密码明确传递到您的网站。你可以在非HTTPS的protocole和GET方法上做到这一点。
然后,在这段代码中:
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:URL]];
您可以从主线程以同步模式调用Web。因此,当Web服务没有响应时,您的UI将被阻止。这不是一个好习惯。那么在异步模式下做会更好。
如果你不熟悉NSURLConnection并且它是异步模式,我会建议你AFNetworking,这是目前最好的REST库。
答案 1 :(得分:2)
为了保存用户名和密码,我个人建议使用Keychain,因为它们在安全性方面比NSUserDefault更安全,因为Keychain以加密形式存储数据,而NSUserDefault以纯文本形式存储。您可以查看:https://github.com/carlbrown/PDKeychainBindingsController
答案 2 :(得分:1)
维护一个标志或变量(假设bool - isUserLoggedIn)。默认值为NO,在
中if ([Result isEqualToString:@"1"])
{
NSLog(@"logged in");
isUserLoggedIn = YES;
}else if ([Result isEqualToString:@"2"]){
UIAlertView *WrongCredential = [[UIAlertView alloc]initWithTitle:@"Loggin failed" message:@"sorry, check again your email and password" delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles: nil];
[WrongCredential show];
isUserLoggedIn = NO;
}
现在您可以随时使用此标志值(isUserLoggedIn)
进行检查希望这就是你要找的东西
答案 3 :(得分:1)
如果要在应用程序启动之间保存用户状态,可能需要在NSUserDefaults
中设置值。
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"UserLogged"];
比你可以检查这个标志
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"UserLogged"]) {}
或者您可以保存用户名和密码。
另外,您可以查看parse.com的基本单点/登录功能。