如何删除UIWebView的所有cookie?


91

在我的应用程序中,我有一个UIWebview加载linkedin身份验证页面以进行登录。用户登录后,Cookie将保存到应用程序中。

我的应用程序有一个与linkedin登录无关的退出按钮。因此,当用户单击此按钮时,他将从应用程序注销。我希望此注销操作也可以从应用程序中清除他的linkedin Cookie,以便用户完全注销。

Answers:


209

根据这个问题,您可以浏览“ Cookie Jar”中的每个cookie并删除它们,如下所示:

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];

@Felipe找到了一种暂时的方法,如果您上次注销,则需要删除应用程序加载中的cookie。
伊舒岛2011年

@Ishu好吧,是的,这正是我现在正在做的事情,但是它并没有真正回答关于如何真正永久删除cookie的问题,而不仅仅是针对当前会话的问题
Felipe Brahm

它将永久删除Cookie。之后发出的任何请求都可能导致重新创建cookie。另外,如果您只想在用户注销的情况下删除cookie,那么我建议您仅删除会话cookie,因为注销实际上只是会话的终止。否则,您将丢失用户希望在会话之间持久保存的潜在设置。
dsingleton,2012年

19
请确保调用[[NSUserDefaults standardUserDefaults]同步]以确保所做的更改已保存到磁盘。@felipe,这就是为什么您看到Cookie在后续运行中返回的原因。
Yetanotherjosh 2012年

我尝试了此操作,但存储返回0计数,我在iOS 8 Simulator上进行了测试。
Nada Gamal 2014年

8

只是想添加一些与此有关的信息。

OS X 10.9 / iOS 7及更高版本中,您可以使用-resetWithCompletionHandler:从以下位置清除整个应用程序的cookie和缓存等sharedSession

清空所有cookie,缓存和凭据存储,删除磁盘文件,将正在进行的下载刷新到磁盘,并确保将来的请求在新的套接字上发生。

[[NSURLSession sharedSession] resetWithCompletionHandler:^{
    // Do something once it's done.
}];

for-in循环deleteCookie:喜欢的声音,同时枚举集合修改给我。(不知道,可能是个坏主意吗?)


我已经使用两种方法都可以成功运行,但是在所有这些操作(未登录)之后,我仍然发现google仍显示搜索历史记录。有任何想法吗?谢谢
mylogon

这会影响Alamofire的任何状态以及我的后端REST API的使用情况吗?Alamofire的解决方案不是基于URLSession吗?
Sajjon

1

您可以在WebView的html内创建一个函数,以清理cookie。

如果仅需要执行一次清洁,则只有在应用启动时才可以通过Titanium事件触发此功能。


1

如果有人在寻找Swift解决方案:

    let storage = HTTPCookieStorage.shared
    if let cookies = storage.cookies{
        for cookie in cookies {
             storage.deleteCookie(cookie)
        }
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.