How to delete all cookies of UIWebView?
Solution 1
According to this question, you can go through each cookie in the "Cookie Jar" and delete them, like so:
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
[storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
Solution 2
Just wanted to add some info regarding this.
In OS X 10.9/iOS 7 and later, you can use -resetWithCompletionHandler: to clear the cookies and cache etc. of the whole app from your sharedSession
:
Empties all cookies, caches and credential stores, removes disk files, flushes in-progress downloads to disk, and ensures that future requests occur on a new socket.
[[NSURLSession sharedSession] resetWithCompletionHandler:^{
// Do something once it's done.
}];
The for-In loop with deleteCookie:
sounds like modifying while enumerating a collection to me. (Don't know, could be a bad idea?)
Solution 3
Previous answers didn't help me in the case of using MKWebView. So, I found another solution:
func loadAuthUrl(_ url: URL) {
let finally: VoidClosure = { [weak self] in
guard let self = self else { return }
let request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 60.0)
self.webView.load(request)
}
let cookieStore = webView.configuration.websiteDataStore.httpCookieStore
cookieStore.getAllCookies({ [weak self] cookies in
guard let _ = self else { return }
let instagramCookies = cookies.filter({ $0.domain == ".instagram.com" })
if instagramCookies.isEmpty {
finally()
} else {
DispatchQueue.global().async(execute: {
let group = DispatchGroup()
for cookie in cookies {
group.enter()
cookieStore.delete(cookie, completionHandler: { group.leave() })
}
group.wait()
DispatchQueue.main.async(execute: finally)
})
}
})
}
Solution 4
If anyone is looking for Swift Solution:
let storage = HTTPCookieStorage.shared
if let cookies = storage.cookies{
for cookie in cookies {
storage.deleteCookie(cookie)
}
}
Solution 5
You could make a function inside the html of the WebView, that cleans the cookies.
If you need the cleaning to be done only once you could trigger this function with a Titanium event, only when the app starts.
Vaibhav Saran
A highly competent, value driven and seasoned Software Professional with over 13+ years of insightful experience credited with Mobile app development and web app development. Extended expertise in Product Implementation, business analysis, Business Requirement Documentation, fitment and Gap analysis Documentation, SRS writing and Functional Testing; demonstrated ability to manage multiple priorities and developing solution in a rapidly changing environmental; ethical and maintain a high level of confidentiality.
Updated on February 02, 2022Comments
-
Vaibhav Saran over 2 years
In my application, I have a
UIWebview
that loads linkedin auth page for login. When user logs in, cookies saves into the application.My app has a logout button that is not related to linkedin login. So when user clicks on this button, he logs off from the app. I want that this log off will clear his linkedin cookies also from the app, so that user will log out completely.
-
Ishu almost 13 years@Felipe Found a temporary way,need to delete cookies in app load if you logout last time.
-
Felipe Brahm almost 13 years@Ishu well, yes, that's exactly what I'm doing now, but it doesn't really answer the question on how to REALLY delete cookies forever and not just for the current session
-
dsingleton almost 12 yearsIt deletes cookies permanently. Any requests that are made after could result in the cookies being recreated. Also, if you're wanting to delete cookies only for situations where a user is logging out, then I would recommend only deleting session cookies, since logging out is really just a termination of the session. Otherwise you lose potential settings that a user wishes to persist across sessions.
-
Yetanotherjosh almost 12 yearsBe sure to call [[NSUserDefaults standardUserDefaults] synchronize] to make sure the changes are saved to disk. @felipe this is why you are seeing the cookies return on subsequent runs.
-
Nada Gamal over 9 yearsI tried this but storage return 0 count , I test it on iOS 8 Simulator .So how can i do to delete cookies of facebook on safari .
-
mylogon about 7 yearsI have used both methods which successfully run, but I am still finding that google is still showing a search history after all of this (not signed in). Any ideas? Thanks
-
Sajjon almost 7 yearsWill this affect any state of Alamofire and my consumption of my Backend REST APIs? Does not Alamofire base its solution on URLSession?