IOS开发之记录用户登陆状态
来源:互联网 发布:大泽乡起义知乎 编辑:程序博客网 时间:2024/05/16 06:07
上一篇博客中提到了用CoreData来进行数据的持久化,CoreData的配置和使用步骤还是挺复杂的。但熟悉CoreData的使用流程后,CoreData还是蛮好用的。今天要说的是如何记录我们用户的登陆状态。例如微信,QQ等,在用户登陆后,关闭应用在打开就直接登陆了。那么我们在App开发中如何记录用户的登陆状态呢?之前在用PHP或者Java写B/S结构的东西的时候,我们用Session来存储用户的登陆信息,Session是存在服务器上仅在一次回话中有效,如果要记录用户的登陆状态,那么会用到一个叫Cookie的东西。Cookie和Session不同,Cookie是存在用户本地的一个文件,Cookie中存的就是用户的登陆信息,当用户在此登陆时,自动从Cookie中读取用户的登陆信息。
不扯Web的啦,在我们App开发中同样也遇到这要的问题,如何记录用户的登陆状态呢? 用我们的CoreData蛮? CoreData适合处理大量的数据,一般和TableView来结合起来使用,当然我们可以用CoreData来存储用户的登陆信息,但这不免有点大材小用,而且用起来也是比较复杂的。那么我们有其他更便捷的方法吗?苹果这么注重用户体验,当然有其他的方法了,就是NSUserDefault. NSUserDefault设置完值以后要进行同步
NSUserDefault是苹果提供给我们用来存储用户的登陆信息的一个类,当然是持久化的了,废话不多说了。我们就模拟一个用户登陆和注销的demo来学习一下如何使用NSUserDefault来存储用户的登陆信息。
1.首先我们得有一个登陆页面对应的类为ViewController.h, 在登陆页面有两个TextField和一个Button用来接受用户的输入,在点击Button中的回调的方法中,如果用户登陆成功,则把用户信息存入UserDefault中,然后以模态的方式来跳转到主界面,首先我们要获取UserDefault的单例,登陆页面中的登陆按钮回调的方法代码如下:
- (IBAction)tapLogin:(id)sender {
//获取用户输入的信息
NSString *username = self.usernameTextField.text;
NSString *password = self.passwordTextField.text;
//对用户信息的验证
if ([username isEqualToString:password]){
//获取userDefault单例
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//登陆成功后把用户名和密码存储到UserDefault
[userDefaults setObject:username forKey:@"name"];
[userDefaults setObject:password forKey:@"password"];
[userDefaults synchronize];
//用模态跳转到主界面
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
id mainViewController = [storyboard instantiateViewControllerWithIdentifier:@"MainView"];
[self presentViewController:mainViewController animated:YES completion:^{
}];
}
}
2.处理完登陆页面,我们会处理根据UserDefault中的name属性是否有值来选择加载哪个页面。在storybaord中我们默认的是主界面,在AppDelegate.m中如果未登陆,我们会设置一下rootViewController,代码如下
//判断是否登陆,由登陆状态判断启动页面
//获取UserDefault
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSString *name = [userDefault objectForKey:@"name"];
//获取storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
//如果用户未登陆则把根视图控制器改变成登陆视图控制器
if (name == nil)
{
NSLog(@"%@",name);
id view = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
self.window.rootViewController = view;
}
3.经过上面的代码我们就可以根据用户登陆状态来选择加载的信息,在登陆后的页面中,我们添加一个按钮,用来退出。在退出按钮回调的方法中,我们需要把之前保存的用户信息进行remove掉,同时用模态的方式来跳转到登陆页面,代码如下:
- (IBAction)tapLoginOut:(id)sender {
//获取UserDefaults单例
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//移除UserDefaults中存储的用户信息
[userDefaults removeObjectForKey:@"name"];
[userDefaults removeObjectForKey:@"password"];
[userDefaults synchronize];
//获取storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
//获取注销后要跳转的页面
id view = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
//模态展示出登陆页面
[self presentViewController:view animated:YES completion:^{
}];
下面的截图是在storyboard中的截图,运行出的效果和下面一样,到此我们就可以实现记录用户的登陆状态了
不扯Web的啦,在我们App开发中同样也遇到这要的问题,如何记录用户的登陆状态呢? 用我们的CoreData蛮? CoreData适合处理大量的数据,一般和TableView来结合起来使用,当然我们可以用CoreData来存储用户的登陆信息,但这不免有点大材小用,而且用起来也是比较复杂的。那么我们有其他更便捷的方法吗?苹果这么注重用户体验,当然有其他的方法了,就是NSUserDefault. NSUserDefault设置完值以后要进行同步
NSUserDefault是苹果提供给我们用来存储用户的登陆信息的一个类,当然是持久化的了,废话不多说了。我们就模拟一个用户登陆和注销的demo来学习一下如何使用NSUserDefault来存储用户的登陆信息。
1.首先我们得有一个登陆页面对应的类为ViewController.h, 在登陆页面有两个TextField和一个Button用来接受用户的输入,在点击Button中的回调的方法中,如果用户登陆成功,则把用户信息存入UserDefault中,然后以模态的方式来跳转到主界面,首先我们要获取UserDefault的单例,登陆页面中的登陆按钮回调的方法代码如下:
- (IBAction)tapLogin:(id)sender {
//获取用户输入的信息
NSString *username = self.usernameTextField.text;
NSString *password = self.passwordTextField.text;
//对用户信息的验证
if ([username isEqualToString:password]){
//获取userDefault单例
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//登陆成功后把用户名和密码存储到UserDefault
[userDefaults setObject:username forKey:@"name"];
[userDefaults setObject:password forKey:@"password"];
[userDefaults synchronize];
//用模态跳转到主界面
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
id mainViewController = [storyboard instantiateViewControllerWithIdentifier:@"MainView"];
[self presentViewController:mainViewController animated:YES completion:^{
}];
}
}
2.处理完登陆页面,我们会处理根据UserDefault中的name属性是否有值来选择加载哪个页面。在storybaord中我们默认的是主界面,在AppDelegate.m中如果未登陆,我们会设置一下rootViewController,代码如下
//判断是否登陆,由登陆状态判断启动页面
//获取UserDefault
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSString *name = [userDefault objectForKey:@"name"];
//获取storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
//如果用户未登陆则把根视图控制器改变成登陆视图控制器
if (name == nil)
{
NSLog(@"%@",name);
id view = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
self.window.rootViewController = view;
}
3.经过上面的代码我们就可以根据用户登陆状态来选择加载的信息,在登陆后的页面中,我们添加一个按钮,用来退出。在退出按钮回调的方法中,我们需要把之前保存的用户信息进行remove掉,同时用模态的方式来跳转到登陆页面,代码如下:
- (IBAction)tapLoginOut:(id)sender {
//获取UserDefaults单例
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//移除UserDefaults中存储的用户信息
[userDefaults removeObjectForKey:@"name"];
[userDefaults removeObjectForKey:@"password"];
[userDefaults synchronize];
//获取storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
//获取注销后要跳转的页面
id view = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
//模态展示出登陆页面
[self presentViewController:view animated:YES completion:^{
}];
下面的截图是在storyboard中的截图,运行出的效果和下面一样,到此我们就可以实现记录用户的登陆状态了
0 0
- IOS开发之记录用户登陆状态
- IOS开发之记录用户登陆状态
- iOS开发之记录用户登陆状态
- IOS开发之记录用户登陆状态
- iOS开发之记录用户登陆代码实现
- IOS 记录用户登陆状态 第二次免登陆
- IOS开发记录用户登录状态
- iOS开发之用户登陆信息存储
- web开发之用户登陆
- centos 记录用户登陆
- iOS 保持登陆状态
- jsp利用session记录登陆状态,保证用户的使用连贯性,并且防止未登录用户绕过登陆页
- 获取Magento用户登陆状态
- Android用户登陆状态信息
- iOS开发实用技术之第三方登陆
- [转载]C#开发Winform记录用户登录状态的方法
- C#开发Winform记录用户登录状态的方法
- Centos查看用户登陆记录
- grep是什么?怎么用?
- Java 中 float 与 double 的区别
- Redis和Memcached的区别(4)redis内存k/v管理
- js调用servlet写相对路径
- 根据节点遍历树——Oracle个人学习
- IOS开发之记录用户登陆状态
- android html唤醒APP(原生)
- OpenCV中的cvNormalize函数原理
- javaBean为什么要实现序列化 Serializable接口?
- Python 读写matlab中.mat文件
- 图基本概念
- Java中使用log4j记录日志
- oracle的乐观锁和悲观锁
- Eclipse从SVN恢复本地<误删除已删除>的文件和代码