2013-03-19 70 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

相關問題