【问题标题】:Deleting Safari cookies programmatically以编程方式删除 Safari cookie
【发布时间】:2017-01-24 23:03:07
【问题描述】:

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 binary cookie reader python 脚本,我可以在 ~/Library/Cookies/Cookies.binarycookies 中验证预期结果

我还验证了诸如 cookieJar.setCookie() 和 cookieJar.deleteCookie() 之类的操作在此存储中进行了更改,并且 cookieJar.cookies 符合预期。

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

URLCache.shared.removeAllCachedResponses()

执行此代码后,网站数据继续被持久化。 Safari->Preferences->Privacy->ManageWebsiteData 似乎没有受到影响。

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

网站数据仍然存在。有谁知道需要采取任何进一步的步骤来完全删除所有网站数据?

【问题讨论】:

    标签: swift macos cookies safari


    【解决方案1】:

    这会删除您应用的 cookie。例如。 NSURLSession 呼叫或 WKWebView 受此影响。您不能从另一个应用程序 (Safari) 中删除用户的 cookie。如果可以,这将是隐私/恶意软件问题。

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

    【讨论】:

    • 感谢 Safari 沙盒的建议,我会试一试。 API 似乎暗示此限制仅适用于 iOS 而不是共享 cookie 存储的 OSX(除非 sessionOnly=TRUE)。
    • 我尝试了沙盒建议并删除了一些其他项目,希望影响显示的网站数据:~/Library/Safari~/Library/Cookies~Library/Caches/com.apple.SafariSafari 网站数据仍然存在。跨度>
    【解决方案2】:

    您可以使用 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
    

    显然,这样做的缺点是用户可以准确地看到正在发生的事情。

    【讨论】:

    • 感谢布鲁斯的回答。出于您所说的原因,我对 applescript 打了折扣,但是该脚本仍然简洁明了,并且比我自己设计的脚本要好得多。我最终操纵 Safari 偏好设置只打开私人浏览器窗口,但同样,这也容易受到用户覆盖设置的影响。 FWIW,这样做的目的是尝试利用新的扩展架构在 Safari 之上添加多用户配置文件支持,但由于 cookie 限制,我无法确保这些配置文件之间没有泄漏。
    • 啊。我认为你总是会为此而苦苦挣扎,因为 Safari 是为单用户设计的——MacOS 是多用户的,一切都希望每个用户都有自己的帐户。您可以尝试滥用“sudo”命令,例如:
    • [抱歉 - 我检查语法时编辑超时] $ sudo -u Guest "open -a Safari" 你需要修改 sudoers 文件才能获得正确的权限。
    猜你喜欢
    • 2012-05-31
    • 2021-04-13
    • 1970-01-01
    • 2017-12-30
    • 2017-05-11
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多