gpt4 book ai didi

objective-c - 如何多次清除 NSHTTPCookieStorage 中的 cookie?

转载 作者:太空狗 更新时间:2023-10-30 03:15:20 26 4
gpt4 key购买 nike

我的桌面应用程序连接到托管在 Google App 引擎上的网络应用程序。一旦它通过身份验证,它就会获得一个 authtoken cookie,它会为所有 future 的请求传递该 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有关

有谁知道如何在与网络服务交互的应用中始终如一地实现“注销”功能?

谢谢,杰西

最佳答案

+(void)clearAllCookies {
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *each in cookieStorage.cookies) {
[cookieStorage deleteCookie:each];
}
}

我知道这是一个老问题,但答案在这里。我们目前在我们的应用中使用它来清除 UIWebView 的所有 cookie(这只能访问您应用中的 cookie,不能以任何方式共享跨应用)。

如果您只想清除特定的,您可以随时检查每个 cookie 对象的属性,然后再决定是否要删除它。例如 cookie.name isEqualToString@"somename"

希望这对外面的人有帮助。

编辑:从某些 iOS 版本开始,现在有一种更简单的方法,有一种按日期清除 cookie 的新方法。

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
[cookieStorage removeCookiesSinceDate:[NSDate dateWithTimeIntervalSince1970:0]];

SWIFT 4.X 版本:(更简单,一个类轮)

HTTPCookieStorage.shared.cookies?.forEach(HTTPCookieStorage.shared.deleteCookie)

关于objective-c - 如何多次清除 NSHTTPCookieStorage 中的 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1852515/

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