【发布时间】:2014-06-16 13:19:57
【问题描述】:
我正在开发一个 iOS 应用程序(使用 AFNetworking 2、AFURLSessionManager),我必须在其中与我无法控制的 API 进行交互(如果这有什么不同,则使用 Symfony PHP 框架)。
问题是这样的:用户有一个帐户。在应用程序首次启动时,用户会获得一个基于表单的登录屏幕。他们登录,然后获得一个会话 cookie。 cookie 将在 30 分钟后过期。它会在客户端每次调用时更新自己。但是,如果重新启动应用程序,cookie 将被删除,如果应用程序空闲超过 30 分钟,cookie 将失效。
我在这里遇到了很多困难。首先,我需要透明地进行登录调用,因此用户不必重新登录。所以我收到错误响应并发出登录请求,成功后我重新发出原始请求。现在的问题是可能会同时发生多个请求,并将其与移动网络连接的不可靠特性相结合。因此,这种逻辑所发生的事情似乎是多次登录和重试以及大量额外代码和错误处理的噩梦。
到目前为止,我的解决方案是:提出请求。如果我收到未经授权的错误响应,请将请求添加到重试队列(我自己管理),设置登录标志,然后发出登录请求。任何新进来的请求首先检查登录标志,以查看是否正在进行登录。如果是这样,他们直接进入重试队列。登录请求完成后,我会通过重试队列并发出所有排队的请求。
到目前为止,这似乎运作良好。但是,我有一种挥之不去的感觉,那就是必须有更好的方法。是否没有内置机制来处理这种情况?这似乎是处理用户身份验证的常用方法,但我在 AFNetworking 中找不到有关如何处理此问题的任何文档。它们涵盖了 Basic 和 Digest 身份验证,但对这种基于表单的会话 cookie 身份验证一无所知。这是我第一次处理这个问题,我简直不敢相信没有其他人遇到过同样的问题。有什么想法吗?
【问题讨论】:
-
这里有同样的问题/问题,我希望 AFNetworking 在运营经理或其他东西中有一种“重新登录”块。
-
我会看看这个 Pratik 这似乎很有希望
标签: ios session authentication cookies afnetworking-2