Swift 以编程方式删除Safari Cookie
OSX Sierra 10.12.1 Safari 10.0.1 我试图以编程方式重现MacOS Safari->Preferences->Privacy->ManageWebsiteData->RemoveAll按钮在删除所有网站数据时的行为,但是,数据似乎总是持续存在。许多SO线程建议使用HTTPCookieStorage类执行以下操作:Swift 以编程方式删除Safari Cookie,swift,macos,cookies,safari,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.sharedCookieS
if #available(OSX 10.11, *) {
cookieJar = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: "Cookies")
} else {
cookieJar = HTTPCookieStorage.shared
}
cookieJar.removeCookies(since: Date(timeIntervalSince1970: 1))
使用二进制cookie阅读器python脚本,我可以在~/Library/Cookies/Cookies.binarycookies中验证预期结果
我还验证了cookieJar.setCookie()和cookieJar.deleteCookie()等操作在该存储中进行更改,并且cookieJar.cookies与预期的一样
我还根据我遇到的几个其他线程添加了这个调用:
URLCache.shared.removeAllCachedResponses()
执行此代码后,网站数据将继续保持不变。Safari->Preferences->Privacy->ManageWebsiteData似乎未受影响
我还尝试了以下指导,并在Safari关闭的情况下执行了此操作,因为这可以使用FileManager类以编程方式实现:
网站数据仍然存在。有人知道要完全删除所有网站数据需要采取哪些进一步的步骤吗?这将删除应用程序的cookies。例如,
nsursession
调用或WKWebView
受此影响。您无法从另一个应用程序(Safari)中删除用户的cookie。如果可以,这将是一个隐私/恶意软件问题
如果这不是一个沙盒应用程序,你可以删除Safari沙盒中的文件 您可以使用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
显然,这有一个缺点,即用户可以准确地看到正在发生的事情。感谢Safari沙箱的建议,我将尝试一下。似乎暗示此限制仅适用于共享cookie存储的iOS而不是OSX(sessionOnly=TRUE除外)。我尝试了沙盒建议,还删除了一些其他项目,希望能够影响显示的网站数据:
~/Library/Safari
~/Library/Cookies
~Library/Caches/com.apple.Safari
Safari网站数据仍然存在。感谢您的回答。由于你所说的原因,我对applescript打了折扣,但是,这个脚本很好,很简洁,比我自己设计的要好得多。我最终操纵了Safari首选项,只打开私有浏览器窗口,但同样,这也容易受到用户覆盖设置的影响。FWIW,其目的是尝试在Safari之上添加多用户配置文件支持,利用新的扩展架构,但我无法确保这些配置文件之间不会因为cookie限制而泄漏。啊。我想你总是会为此而挣扎,因为Safari是设计为单用户的——MacOS是多用户的,所有东西都希望每个用户都有自己的帐户。您可以尝试滥用“sudo”命令,例如:[抱歉-我检查语法时编辑超时]$sudo-u Guest“open-a Safari”您需要修改sudoers文件才能获得正确的权限。