あなたは自分の考えにかなり近いです。ユーザーのログインプロセスと非常によく似たアプローチを使用しています。
私は現在、電子メールとパスワードを1つの40文字のトークンにソルトしてハッシュします。ログインが成功した場合は、トークンをNSUserDefaultsに保存します。このトークンは、ユーザーがログアウトするまで他のすべてのWebリクエストに使用します。ログアウトすると、ユーザーのデフォルトが削除されます。
同じプロセスで使用するスニペットを次に示します。
// see if a login already exists
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
self.token = [defaults stringForKey:@"token"];
// if the token is nil/blank, launch login view
if(self.token == nil || [self.token isEqualToString:@""]) {
[self loadStartView];
return;
}
// build the request to update status
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];
NSString *stringData = [NSString stringWithFormat:@"<your api string here"];
NSString *requestData = stringData;
NSData *myRequestData = [NSData dataWithBytes: [requestData UTF8String] length: [requestData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:[NSString stringWithFormat:@"<your url request here>"]]];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: myRequestData];
NSData *jsonData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
NSString *json = [[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding] autorelease];
NSDictionary *payloadData = [json JSONValue];
[request release];
if([[payloadData objectForKey:@"success"] boolValue]) { // this is designed around my api, but you get the idea
//NSLog(@"updateStatus: %@", payloadData);
// updates the api version for every call
[defaults setObject:self.token forKey:@"token"];
}