Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 以编程方式删除Safari Cookie_Swift_Macos_Cookies_Safari - Fatal编程技术网

Swift 以编程方式删除Safari Cookie

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

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))
使用二进制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文件才能获得正确的权限。