【问题标题】:Delete cookies UIWebView删除 cookie UIWebView
【发布时间】:2011-11-25 21:32:46
【问题描述】:

如何在 UIWebView 中删除 cookie?这段代码:

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

删除 cookie,但是当我重新启动我的应用程序时,NSHTTPCookieStorage 中有相同的 cookie。有时这段代码有效,但我想让它每次都有效。如何解决这个问题?

【问题讨论】:

    标签: objective-c ios cookies uiwebview


    【解决方案1】:

    试试这样的:

    NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
            NSArray* facebookCookies = [cookies cookiesForURL:
                                        [NSURL URLWithString:@"http://login.facebook.com"]];
            for (NSHTTPCookie* cookie in facebookCookies) {
                [cookies deleteCookie:cookie];
            }
    

    【讨论】:

    • 你说代码有时可以工作。你能多说一些吗?
    • 我的意思是它随机工作,我无法控制这个:) 在同样的问题中,人们写到 ios 4.0++ 中的一些滞后。在您的应用程序启动时删除 Cookies,如果应用程序已重新启动,则 Cookies 返回)
    • Cookie 保存在 NSUserDefaults 中,因此要清理它们,您可以删除所有 NSUserDefaults 数据,如下所示:NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier]; [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
    【解决方案2】:

    这对我有用:

    NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    
    NSArray *allCookies = [cookies cookies];
    
    for(NSHTTPCookie *cookie in allCookies) {
        if([[cookie domain] rangeOfString:@"facebook.com"].location != NSNotFound) {
            [cookies deleteCookie:cookie];
        }
    }
    

    【讨论】:

      【解决方案3】:

      由于某些奇怪的原因,删除单个 cookie 并不总是有效。要真正删除 cookie,您需要存储非特定 cookie,然后重新加载它们,然后遍历所有 cookie 并删除它们,例如这样

      NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
         if (cookies != nil && cookies.count > 0) {
             for (NSHTTPCookie *cookie in cookies) {
                 [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
             }
             [[NSUserDefaults standardUserDefaults] synchronize];
         }
      

      【讨论】:

        【解决方案4】:

        与上一个类似,但更简单:

        NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        
        NSArray *allCookies = [cookies cookies];
        
        for(NSHTTPCookie *cookie in allCookies) {
            if([[cookie domain] contains:@"facebook.com"]) {
                [cookies deleteCookie:cookie];
            }
        }
        

        “最佳答案”很糟糕,因为它允许删除指定具体 URL 的 cookie。因此,例如,您删除了“login.facebook.com”的 cookie,但您可能会错过“www.login.facebook.com”

        【讨论】:

          【解决方案5】:

          请务必致电:

          [[NSUserDefaults standardUserDefaults] synchronize];

          最后...像魅力一样工作...

          【讨论】:

            猜你喜欢
            • 2011-05-27
            • 2012-05-23
            • 2010-11-07
            • 2010-10-15
            • 1970-01-01
            • 2017-11-08
            • 2010-12-18
            • 2018-01-21
            相关资源
            最近更新 更多