【发布时间】:2021-04-24 04:39:19
【问题描述】:
我的桌面应用程序连接到托管在 Google App 引擎上的网络应用程序。一旦它进行身份验证,它就会获得一个 authtoken cookie,它会传递给所有未来的请求。一切正常。
但现在我想添加“退出”。我试过这样实现注销:
- (void)signOut {
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *each in [[[cookieStorage cookiesForURL:[NSURL URLWithString:self.serviceRootURLString]] copy] autorelease]) {
[cookieStorage deleteCookie:each];
}
[self clearCredentialStorage];
}
问题是它似乎只在第一次工作。例如,我可以打开我的应用程序。登录。提出一些要求。登出。然后下次我提出请求时,我会被要求再次进行身份验证。好!
但是在我第二次进行身份验证后,问题发生了。身份验证有效。我得到了 authtoken cookie。我可以提出要求。但是当我第二次尝试注销(没有重新启动我的应用程序)时,authtoken cookie 似乎没有被删除。从我的应用程序的角度来看,它似乎确实被删除了......我向 NSHTTPCookieStorage 询问它具有我的 URL 的 cookie,但它没有返回任何内容。但是,如果我尝试发出另一个请求(这应该需要 authtoken cookie),该请求就可以正常工作,我不会收到 401 响应,也不会再次要求我进行身份验证。
所以,如果我理解正确的话,从我的角度来看,cookie 似乎被删除了,但从底层 URL 加载框架的角度来看,它们并没有被删除。
可能感兴趣,也许问题与:http://www.macworld.com/article/143343/2009/10/safaricookieproblems.html
有谁知道如何在与 Web 服务交互的应用中始终如一地实现“注销”功能?
谢谢, 杰西
【问题讨论】:
标签: objective-c cocoa google-app-engine