gpt4 book ai didi

iOS App - 如何使用 AFNetworking 2 实现自动 session cookie 刷新

转载 作者:可可西里 更新时间:2023-11-01 04:57:51 25 4
gpt4 key购买 nike

我正在开发一个 iOS 应用程序(使用 AFNetworking 2、AFURLSessionManager),我必须在其中与我无法控制的 API 进行交互(如果有任何不同,它使用的是 Symfony PHP 框架)。

问题是这样的:用户有一个帐户。在应用程序首次启动时,用户会看到一个基于表单的登录屏幕。他们登录,然后获得一个 session cookie。 cookie 将在 30 分钟后过期。它会在客户端进行的每次调用时更新自身。但是,如果应用程序重新启动,cookie 将被删除,如果应用程序闲置超过 30 分钟,cookie 将失效。

我在这里遇到了很多困难。首先,我需要透明地进行登录调用,这样用户就不必重新登录。所以我得到错误响应并发出登录请求,成功后我重新发出原始请求。现在的问题是可能会同时发生多个请求,并将其与移动网络连接的不可靠特性相结合。因此,此逻辑所发生的事情看起来像是多次登录和重试以及大量额外代码和错误处理的噩梦。

到目前为止,我的解决方案是:提出请求。如果我收到未经授权的错误响应,请将请求添加到重试队列(我自己管理),设置登录标志,然后发出登录请求。任何新的请求首先检查登录标志,看看是否有正在进行的登录。如果是这样,他们直接进入重试队列。登录请求完成后,我会遍历重试队列并发出所有排队的请求。

到目前为止,这似乎运作良好。但是,我有一种挥之不去的感觉,那就是必须有更好的方法。没有内置机制来处理这种情况吗?这似乎是处理用户身份验证的常用方法,但我在 AFNetworking 中找不到有关如何处理此问题的任何文档。它们涵盖了 Basic 和 Digest 身份验证,但没有介绍这种基于表单的 session cookie 身份验证。这是我第一次不得不处理这个问题,我简直不敢相信没有其他人遇到过完全相同的问题。有什么想法吗?

最佳答案

您的 session ID 应该在用户登录后自动发送,只要 cookie 在发送下一个请求之前没有过期。 AFNetworking 使用的 NSURLConnection 负责处理这是一种保存和加载 cookie 的方法,请像这样尝试

 - (void)saveCookies{

NSData *savecookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject: savecookiesData forKey: @"sessionCookies"];
[defaults synchronize];

}

- (void)loadCookies{

NSArray *loadcookiesarray = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"sessionCookies"]];
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

for (NSHTTPCookie *cookies in loadcookiesarray){
[cookieStorage setCookie: cookies];
}

}

关于iOS App - 如何使用 AFNetworking 2 实现自动 session cookie 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23384390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com