使用 Firefox。我想摆脱“过时”的 cookie。“过时”是指过去 x 天内没有任何网站访问过的 cookie。
我找遍了所有地方,但还是没找到如何做到这一点。我找到的方法包括:
- 限制所有 cookie 的生存期(about:config -> network.cookie.lifetimePolicy)。
- 白名单或黑名单域名(firefox 偏好设置 -> 隐私 -> cookie 例外)。
- 删除过去 x 小时内的所有 cookie(firefox 历史记录 -> 清除最近历史记录)。
这些都不是我想要的。
我想要删除过去 x 天内未被任何网站访问过的所有 cookie。
答案1
这饼干时间扩展可以配置为自动删除在指定时间内未使用的 cookie(已过期)。它还有一个单独的设置来强制过期/删除全部超过指定期限的 cookie。
答案2
我做了一些研究。
- Cookie 存储在
cookies.sqlite
Firefox 配置文件目录中的文件。 - 该文件是一个 sqlite 数据库。
- 最后一次访问的时间戳存储在
lastAccessed
表中的列moz_cookies
。 - 格式
lastAccessed
是一些PRTime
格式,基本上是带有微秒的 UNIX 纪元时间。
以下查询将列出过去 14 天内未访问过的每个 cookie。
select host, name from moz_cookies
where lastaccessed < strftime('%s000000', 'now', '-14 days')
order by lastaccessed;
我刚刚学习了一些有关此方面的 SQL,因此这个查询很可能可以做得更好。
以下查询将删除所有这些 cookie。
delete from moz_cookies
where lastaccessed < strftime('%s000000', 'now', '-14 days');
这是一个可以完成此任务的简单 shell 脚本。您需要sqlite3
在系统上安装该命令。
#!/bin/sh
DAYS="14"
SELECT="select host, name"
DELETE="delete"
FROM="from moz_cookies"
OBSOLETE="strftime('%s000000', 'now', '-$DAYS days')"
WHERE="where lastaccessed < $OBSOLETE"
ORDER="order by lastaccessed"
SELECTQUERY="$SELECT $FROM $WHERE $ORDER;"
DELETEQUERY="$DELETE $FROM $WHERE;"
printf '%s\n' "$SELECTQUERY" | sqlite3 cookies.sqlite