以编程方式删除Safari Cookie

时间:2017-01-24 23:03:08

标签: swift macos cookies safari

OSX Sierra 10.12.1 Safari 10.0.1

我试图在删除所有网站数据时以编程方式重现MacOS Safari-> Preferences-> Privacy-> ManageWebsiteData-> RemoveAll按钮的行为,但是,数据似乎总是存在。许多SO线程使用HTTPCookieStorage类在这些方面提出了一些建议:

if #available(OSX 10.11, *) {
    cookieJar = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: "Cookies")
} else {
    cookieJar = HTTPCookieStorage.shared
}
cookieJar.removeCookies(since: Date(timeIntervalSince1970: 1))

使用this二进制cookie阅读器python脚本我可以在〜/ Library / Cookies / Cookies.binarycookies中验证预期的结果

我还验证了cookieJar.setCookie()等操作,并且cookieJar.deleteCookie()在此商店中进行了更改,并且cookieJar.cookies正如预期的那样。

我还根据我遇到的其他几个SO线程添加了此调用:

URLCache.shared.removeAllCachedResponses()

执行此代码后,网站数据将继续保留。 Safari->偏好设置 - >隐私 - > ManageWebsiteData似乎不受影响。

我也尝试过这里的指导并在Safari关闭时执行此操作,因为这可以使用FileManager类以编程方式实现: https://www.macissues.com/2015/06/22/how-to-fully-reset-safari-on-your-mac/

网站数据仍然存在。有没有人知道为完全删除所有网站数据需要采取的任何进一步措施?

2 个答案:

答案 0 :(得分:0)

这会删除您应用的Cookie。例如。 NSURLSession来电或WKWebView受此影响。您无法从其他应用程序(Safari)中删除用户的Cookie。如果可能,这将是隐私/恶意软件问题。

如果这不是沙盒应用,您可以删除Safari沙箱中的文件。

答案 1 :(得分:0)

您可以使用AppleScript单击“全部删除”按钮。

tell application "System Events" to tell process "Safari"

    -- Display the preferences privacy tab
    keystroke "," using command down
    delay 1
    click button "Privacy" of toolbar 1 of window 1

    -- Display the cookie list  
    click button "Manage Website Data…" of group 1 of group 1 of window "Privacy"
    delay 3
    click button "Remove All"
    click button "Done"

end tell

显然,这样做的缺点是用户可以准确地看到发生了什么。