2013-03-19 54 views
1

我想制作一个具有loginViewController的iphone应用程序。这个代码是否正确和安全?IOS登录 - 此代码是否正确/安全?我如何检查用户是否已经登录?

-(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中,我可能会设置一个会话/ cookies(?),对吧?我如何用Objective C做到这一点?

回答

1

保持一个标志或变量(让说布尔 - 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)

希望随时检查,这是你在找什么

+0

感谢您的建议。 +1 – mat 2013-03-19 15:27:32

+0

这个答案与应用程序范围有限有关。如果即使在应用程序关闭后仍想保留该信息,则使用NSUserDefaults存储该值 - 这是保存单个值(最小数据)的更好选择。您可以通过网络轻松获取有关NSUserDefaults的教程。 – Mrunal 2013-03-19 16:39:10

2
NSString *usr = [[NSString alloc]init]; 
NSString *psw = [[NSString alloc]init]; 

usr = username.text; 
psw = password.text; 

这段代码创建内存泄漏。你不必ALLOC一个字符串,并从后标签检索,只需更换:

NSString* usr = username.text; 
NSString* psw = password.text; 

然后,通过在清除密码到您的网站。并且您在非HTTPS协议和GET方法上进行此操作。

  1. 加密密码之前发送到Web
  2. 使用POST方法做一个登录
  3. 如果可能的话,使用HTTPS协议,使您的网站。

那么,在这段代码:

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:URL]]; 

您对网络同步模式从主线程调用。因此,在Web服务没有响应时,您的UI将被阻止。这不是一个好习惯。在异步模式下做更好。

如果你不熟悉NSURLConnection和它的异步模式,我会推荐你​​AFNetworking,这是目前最好的REST库。

+0

谢谢你。你能否也请建议如何检查用户是否登录? – mat 2013-03-19 15:28:18

+0

你的网络服务需要返回一个cookie或一个认证密钥。当您拨打ws电话时,如果您选择cookie,服务将检查cookie以确定您是否已登录,如果您选择授权码,则将其传递到http标题中,并且如果密钥对应于您从Web服务验证一个用户,如果这个键没有被拒绝(例如太老) – 2013-03-19 15:36:22

1

如果您想保存用户状态之间的应用程序启动,你可能需要NSUserDefaults设定值。

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"UserLogged"]; 

比你可以检查此标志

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"UserLogged"]) {} 

也可以保存用户名和密码。你

也可以看看到parse.com基本singup /登录功能。

+0

感谢您回答第二个问题。 +1 – mat 2013-03-19 15:27:00

2

保存用户名和密码我个人建议使用钥匙串,因为它们在安全性方面比NSUserDefault更安全,因为钥匙串以加密形式存储数据,而NSUserDefault以纯文本形式存储数据。您可以查看:https://github.com/carlbrown/PDKeychainBindingsController

+0

我只是看着苹果的文档。感谢+1 – mat 2013-03-19 16:30:34

相关问题