在带有 AFnetworking 的 iOS 应用程序上使用 cookie
Posted
技术标签:
【中文标题】在带有 AFnetworking 的 iOS 应用程序上使用 cookie【英文标题】:Using cookies on iOS application with AFnetworking 【发布时间】:2013-06-15 02:55:28 【问题描述】:我正在构建一个与 php Web 服务对话的 ios 应用程序。 Web 服务还为 Web 应用程序提供服务。因此,有一个使用用户名和密码的简单注册和登录功能,在 Web 应用程序端,当您登录时,您可以选择单击记住我,它会存储一个持续 1 年的 cookie,因此您不必登录在您每次访问该页面时。
现在,进入 iOS 部分。用户第一次打开需要输入凭据的应用程序时,这会向 Web 服务发送一个 post 调用,因为它和 iOS 应用程序假定单击了记住我,因此它返回 cookie 以避免再次询问凭据.
我了解到有些人将 cookie 保存在用户默认值上,并在每次启动应用程序时恢复它们。但是我已经测试了几次,显然这个cookie被神奇地保存了,没有我写任何代码,我什至关掉手机启动应用程序,网络服务仍然记得我。
那么,我必须保存 cookie 吗?有必要吗 ?我应该提高安全性吗?如果是这样怎么办?
【问题讨论】:
你还想知道什么...? 没有别的了@VivekSehrawat 谢谢你的帮助! 【参考方案1】:NSUserdefaults 中没有这样的魔法可以保存数据,我可以告诉你如何做到这一点。首先,您必须获取一个 bool,如果您单击了 remember me 按钮,它可以存储该信息。如果用户点击了它,则 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
【讨论】:
【参考方案2】:正如您所观察到的,cookie 是为您存储的,并且“通常”会遵守从服务器返回的指定 cookie 政策和时间安排。虽然它不是 100% 可靠的,在某些情况下,cookie 可能会在设定的日期之前被删除(可能不会经常发生)。如果您乐于承担用户有时可能不得不重新登录的“风险”,那么您无需做任何事情。如果您想确定管理,那么您应该使用NSHTTPCookieStorage
获取cookie,将它们存储在其他地方(如NSUserDefaults
)并稍后恢复它们。
【讨论】:
以上是关于在带有 AFnetworking 的 iOS 应用程序上使用 cookie的主要内容,如果未能解决你的问题,请参考以下文章
带有 XMLParser 的 AFNetworking HTTPClient 子类
iOS,AFNetworking - 带有 JSON 响应的“清除”NSSTring [关闭]
带有 AFNetworking 的 iOS POST:NSLocalizedDescription=请求失败:内部服务器错误 (500)