1

PHP Web サービスと通信する iOS アプリケーションを構築しています。Web サービスは、Web アプリケーションも提供します。そのため、ユーザー名とパスワードを使用する簡単な登録およびログイン機能があり、Web アプリケーション側でログインすると、[記憶する] をクリックするオプションがあり、1 年間保持される Cookie が保存されるため、ログインする必要はありません。ページにアクセスするたびに。

さて、iOSの部分に進みます。ユーザーが資格情報の入力を要求されるアプリを初めて開くと、Web サービスに post 呼び出しが送信されます。これは、そのアプリと iOS アプリケーションがクリックされたことを記憶していると想定するため、再度資格情報を要求することを避けるために Cookie を返すためです。 .

ユーザーのデフォルト設定に Cookie を保存し、アプリを起動するたびにそれらを復元する人がいると読んだことがあります。しかし、私は何度かテストしましたが、どうやらこの Cookie はコードを書かなくても魔法のように保存されているようです。電話をオフにしてアプリを起動しても、Web サービスはまだ私を記憶していました。

それで、クッキーを保存する必要がありますか? それは必要ですか ?セキュリティを強化する必要がありますか?もしそうならどのように?

4

2 に答える 2

3

NSUserdefaultsにデータを保存できるような魔法はありません。どうすればそれができるかを教えてください。最初に、記憶するボタンをクリックした場合に保存できるboolを取得する必要があります。ユーザーがそれをクリックした場合、check bool は true になり、ユーザーがログインすると、bool が true の場合にチェックされ、データが NSUerdefault に保存されます。

アプリケーションが起動するたびに、最初に NSUserdefault 内の bool が true かどうかを確認し、true の場合はサービスにアクセスしてログインし、ログイン画面に移動しません。要件に応じて、以下のコードをさらに変更できます

-(IBAction)remember{
    check=TRUE;
}
-(IBAction)Login{

    if (check) {
        NSLog(check ? @"True" : @"False");

        NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
        [defaults setBool:TRUE forKey:@"data"];
        [defaults setObject:emailStr forKey:@"email"];
        [defaults setObject:passStr forKey:@"pass"];
        [defaults synchronize];
        NSLog(@"Data saved");
    }
//write here code for sending the request for login 
}

In Appdelegate write this 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"data"])
    {
        [self displayLogin];
    } else
    {
        [self displayMainScreen];
    }
       [self.window makeKeyAndVisible];
    return YES;
}
-(void)displayLogin{
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    UINavigationController *navigation=[[UINavigationController alloc]initWithRootViewController:self.viewController];
    self.window.rootViewController = navigation;
}
-(void)displayMainScreen{

    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    NSString *emailStr = [defaults objectForKey:@"email"];
    NSString *passStr = [defaults objectForKey:@"pass"];
//write here code for sending the request for login 
}
于 2013-06-15T04:40:35.320 に答える
1

お気づきのように、Cookie は保存され、指定された Cookie ポリシーとサーバーから返されたタイミングを「一般的に」尊重します。ただし、100% 信頼できるわけではなく、場合によっては、設定された日付の前に Cookie が削除される可能性があります (おそらく頻繁には発生しません)。ユーザーが時々再ログインしなければならない可能性があるという「リスク」を負うことに満足している場合は、何もする必要はありません。管理を確実にしたい場合は、 を使用NSHTTPCookieStorageして Cookie を取得し、別の場所 ( などNSUserDefaults) に保存して、後で復元する必要があります。

于 2013-06-15T07:39:42.633 に答える