如何使用AFNetworking管理会话?

55

如标题所示,我在一个iOS项目中使用AFNetworking,并且该应用程序与服务器通信。当用户登录时,服务器会响应并返回成功标志,响应头包含会话ID。

我想知道AFNetworking是否会自动发送会话ID以便于每个随后的请求,还是我需要以某种方式自己处理?

值得注意的是,我无法控制后端如何验证请求的身份。我只是构建了一个与服务器通信的客户端。

2个回答

116

是的,一旦您成功登录,您的会话ID应该会自动发送,只要在下一个请求被发送之前Cookie不过期(这是一个重要的细节需要确认)。AFNetworking使用的NSURLConnection会为您处理这些细节。

在后端,AFNetworking使用NSURLConnection,它会自动更新NSHTTPCookieStorage来存储会话。您可以通过操作cookie存储来随意更改或删除cookies。

例如,如果您想让服务看起来像未登录状态,您可以直接删除与该域关联的会话cookie。我曾与一些服务合作,如果您已经登录并尝试重新登录,它们会出现错误。此外,没有办法检查登录状态。快速解决方法是获取URL的cookies并将其删除:

NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: networkServerAddress];
for (NSHTTPCookie *cookie in cookies) 
{
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}

开发者自述


如果您给我点“踩”,请留下回复说明我的答案为何不正确。 - Michael Boselowitz
这也是我的印象,这澄清了AFNetworking和NSURLConnection的一些工作方面。感谢您的回答。 - Bart Jacobs
@MichaelBoselowitz 我之前遇到了一个问题,因为明确设置了cookie。但在阅读了您的答案后,我删除了明确设置的cookie。现在一切都运作得很好 :D 谢谢! - MilanPanchal
@milanpanchal,我很高兴我的回答有所帮助! =)。 - Michael Boselowitz

4
这取决于您正在互动的服务规范。我曾经使用过类似的服务,它们在文档中明确说明,为了保持会话有效,我必须每隔几秒钟通过发送“1”来轮询该服务。
但是,如果可能的话,请提供服务名称或任何我们可以阅读的参考资料。如果它是某个公司的私有API,则他们必须描述返回的会话ID的用途。
底层技术将会处理它,但是如果您想要持续那些cookie,可以参考这个问题的答案: Persisting Cookies In An iOS Application?

谢谢您的回答。确实是私有API,且基于会话。我的问题实际上是关于AFNetworking或iOS本身如何管理会话的。如果我收到一个带有会话ID的cookie,那么它是否会自动发送到每个后续请求,直到会话过期?这样的问题是我想知道答案的。 - Bart Jacobs
到底是怎么回事?给我踩的人,能不能写下你们认为这个答案有什么问题? - TeaCupApp
@Owl 没错,我也想知道为什么我现在被踩了。我认为我的回答没有任何问题。 - Michael Boselowitz
1
如何在客户端检测到会话过期?我们应该期望哪个回调函数?或者只需检查请求(具有该会话ID)是否成功即可? - Cole
+1 给链接...感谢解释。有人能回答Cole的问题吗?我也在寻找同样的答案。 - Anshul
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接