1

我正在构建一个与 php Web 服务对话的 iOS 应用程序。Web 服务还为 Web 应用程序提供服务。因此,有一个使用用户名和密码的简单注册和登录功能,在 Web 应用程序端,当您登录时,您可以选择单击记住我,它会存储一个持续 1 年的 cookie,因此您不必登录在您每次访问该页面时。

现在,进入 iOS 部分。用户第一次打开需要输入凭据的应用程序时,这会向 Web 服务发送一个 post 调用,因为它和 iOS 应用程序假定单击了记住我,因此它返回 cookie 以避免再次询问凭据.

我读到有些人将 cookie 保存在用户默认值上,并在每次启动应用程序时恢复它们。但是我已经测试了几次,显然这个cookie被神奇地保存了,没有我写任何代码,我什至关闭了手机启动应用程序,网络服务仍然记得我。

那么,我必须保存 cookie 吗?有必要吗 ?我应该提高安全性吗?如果是这样怎么办?

4

2 回答 2

3

没有这样的魔法可以在NSUserdefaults中保存数据,我可以告诉你如何做到这一点。首先,您必须获取一个布尔值,如果您单击了记住我按钮,它可以存储该值。如果用户点击了它,那么 check bool 为真,当用户登录时,它将检查 bool 如果为真,那么它将把数据保存在 NSUerdefault 中。

每当应用程序启动时,它首先会检查 NSUserdefault 中的布尔值是否为真,如果为真,它将访问服务并登录,它也不会导航到登录屏幕。您可以根据您的要求更多地修改以下代码

-(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 回答