繁体   English   中英

iOS登录-此代码正确/安全吗? 如何检查用户是否已经登录?

[英]IOS login - is this code correct/secure? How can I check if the user is already logged in?

我想制作一个具有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?

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协议和GET方法上进行设置。

  1. 发送到网络之前先对密码进行加密
  2. 使用POST方法进行登录
  3. 如果可能,请使您的站点使用HTTPS协议。

然后,在这段代码中:

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

您可以从主线程以同步模式调用Web。 因此,您的用户界面将在Web服务未响应时被阻止。 这不是一个好习惯。 最好在异步模式下进行。

如果您不熟悉NSURLConnection及其异步模式,建议您使用AFNetworking ,这是目前最好的REST库。

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

维护一个标志或变量(比方说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)进行检查

希望这是您要寻找的

如果要在应用程序启动之间保存用户状态,则可能需要在NSUserDefaults设置值。

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

比您可以检查此标志

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

或者,您可以保存用户名和密码。

您也可以查看parse.com以获取基本的登录/登录功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM