关掉阅后即焚标签页之后,# 后面的密钥为什么还能从「最近关闭的标签」找回来
关掉标签,不等于地址栏 # 后面的密钥已经从这台电脑消失。浏览器为了支持「重新打开刚才关掉的页」,会把当时的完整网址写进会话历史;Ctrl+Shift+T(macOS 上是 ⌘+Shift+T)恢复的就是这一条,其中包含片段。下面把「服务器看不到密钥」和「本机还能把密钥找回来」拆开,并写出当场能对照的步骤。不是阅后即焚创建页的操作说明书。
先分清 关掉标签写进了哪一层
本篇只回答「关掉阅后即焚标签页之后,# 后面的密钥为什么还能从最近关闭的标签找回来」。不是「# 为什么不进服务器日志」那一层,也不是阅后即焚的表单说明。
关掉标签写进了 哪一层
这不是「页面关了,地址就从世界上消失」。浏览器先记住你刚才停在哪,才能在下一秒把它打开。
把一条 https://…/s.html?id=…#… 打开之后,地址栏里同时有两段:问号后面的密文编号,以及 # 后面的解密密钥。关掉这个标签时,很多人把动作读成「密钥已经不在这台电脑上了」。浏览器要做的事情正好相反。为了支持后退、前进、崩溃恢复和「最近关闭的标签」,它必须把这一次导航的完整网址留下来。Chromium 把每个标签页的这段记录叫会话历史(session history):一条导航项里包含当时的 URL、滚动位置和未提交的表单等内容。标签被关掉或浏览器被重启之后,这些导航项会被序列化,用来把标签原样恢复。说明见 Chromium 文档《Session History》。
Firefox 把同一类能力叫做 Session Restore:它跟踪窗口、标签和最近关闭的标签,并把每个标签的历史、滚动位置和表单一起写到磁盘,好在启动或「撤销关闭」时再读回来。说明见 Firefox Source Docs《Session Restore》。Microsoft Edge 基于 Chromium,恢复关掉的标签时走的是同一套会话历史,而不是另写一套「只记标题、丢掉片段」的规则。
这和 HTTP 请求不是同一层。IETF RFC 3986 §3.5 把 fragment 定义成客户端标识,不参与服务器对 URI 的处理。所以 UsePwd 的访问日志里看不到 # 后面的密钥,这一点已经在URL 的 # 片段为什么不会出现在服务器日志里写过。本篇要补的是另一层:片段不进请求,不等于片段不进你自己的浏览器记录。关掉标签只结束了这一次绘制,没有自动擦掉会话历史里的那条完整网址。
「服务器看不到密钥」和「这台电脑还能把密钥找回来」可以同时成立。前者看网络面板里的请求行,后者看「最近关闭的标签」恢复后的地址栏。
最近关闭的标签为什么 带着 #
恢复不是重新去搜索引擎里找这个站点,而是把关掉前那一条网址再导航一次。
在 Chrome 或 Edge 里按 Ctrl+Shift+T,或打开菜单里的「历史记录 → 最近关闭的标签页」,浏览器取出刚才那条会话记录,按里面保存的 URL 打开。Firefox 的「最近关闭的标签」同样从 Session Store 里选一条记录,并把当时活动历史项的 URL 当作重新打开的目标。片段是 URL 的一部分,不是页面标题旁边的装饰;恢复时没有单独的步骤去把它剥掉。
长期历史和会话历史也不完全是同一份数据。Chromium 写进历史数据库时,会去掉网址里的用户名和密码,但源代码里这一步并没有清掉 fragment。转换函数见 Chromium GurlToDatabaseUrl。因此 chrome://history 里出现带 # 的阅后即焚地址,并不反驳「请求里没有片段」:历史库记的是你访问过的完整字符串,请求行里仍然只有 s.html?id={编号}。
右键「复制标签页」走的是另一条捷径。Chromium 写明,复制标签或在新标签里执行后退、前进、刷新时,会直接克隆导航项,而不是先写成文件再读回来。克隆出来的新标签地址栏里,通常仍是关掉前那一串,包括 # 和密钥。共享电脑上这比「到历史页里翻」更快:旁边的人不必会查历史,只要复制标签就能拿到同一条链接。
发给服务器的是 s.html?id=编号。网络面板和访问日志里看不到密钥。
最近关闭的标签、崩溃恢复、复制标签页,用的是关掉前那一条网址。
历史库会去掉用户名和密码,不会只因为有片段就拒绝记录。
无痕窗口是一条能当场对照的例外,但不要读成「无痕等于密钥已销毁」。同一个无痕窗口还开着时,Ctrl+Shift+T 往往仍能恢复刚关掉的标签,地址栏里的 # 也还在。只有最后一个无痕窗口也被关掉之后,这次会话里的「最近关闭的标签」才会一起丢掉。要核对照的是「窗口还在不在」,不是「图标是不是无痕」。
书签和同步还会 送到哪
「最近关闭的标签」只是本机第一条捷径。同一账号下的书签和已打开标签,可能把同一串地址带到另一台设备。
把阅读页加进书签时,浏览器保存的是当时地址栏里的字符串。星星按钮不会先问「# 后面是不是密钥」,再决定只存路径。之后在任何一台打开了书签同步的设备上点开这一条,地址栏会再次出现完整链接。Apple 说明,为 Safari 打开 iCloud 之后,书签和已打开的标签会存进 iCloud,并在 iPhone、iPad 和 Mac 之间保持更新;书签还会同步到安装了 Windows 版 iCloud 的电脑。说明见 Apple《在设备之间用 iCloud 保持 Safari 同步》。
Chrome 把「历史记录和标签页」写成一类可开关的同步项。打开之后,已打开的标签可以在「历史记录 → 其他设备上的标签页」里看到。帮助页见 Chrome《在所有设备上获取书签、密码等》。企业文档把「打开的标签」写成包含这些标签的 URL、顺序、固定状态和窗口位置。Chrome 的「发送到设备」(Send Tab to Self)在同步记录里写入的是完整 GURL 的 spec(),普通 # 片段会跟着一起序列化,而不是先被剥掉。实现见 Chromium SendTabToSelfEntry。
分享菜单不能和书签当成同一件事。有人在 iPad 的 Safari 里用系统分享把带片段的网址发到邮件,发出去的字符串有时只剩到 # 之前;从地址栏全选复制则通常能保住片段。这条差异说明:不要用「我点过分享」来判断密钥在不在,而要用接收方或另一台设备地址栏里实际出现的字符来判断。聊天预览抓取停在标题层,是另一篇文章;完整链接一旦进了书签或同步,走的已经不是预览机器人。
开了同步,不等于 Google 或 Apple 能解开密文:它们同步的是网址字符串,不是 UsePwd 服务器上的明文。风险在于「另一台已登录同一账号的设备也能打开这条链接」,不在于「同步服务代替你点了打开并查看」。
从本页清除和关掉标签 差在哪
阅读页上的「从本页清除」会改当前这条会话记录;只按关闭按钮,不会走这一步。
UsePwd 的阅后即焚把密钥放在 s.html?id={id}#{key} 的 # 之后。创建和阅读都打开即用,双方都不用注册。当前标签页用 Web Crypto 按 AES-256-GCM 加密或解密,明文上限 32 KB;上传字段只有密文、过期时间和阅读次数。过期时间可选 1 小时、24 小时、7 天,或「仅阅后焚毁」;阅读次数 1–10,默认 1。服务器只暂存密文,看不到明文,也没有账号可以按用户找回。
接收方打开阅读页时,页面先询问密文还在不在,这一步不消耗次数。点了「打开并查看」之后,浏览器才取回密文,并在本机用 # 后的密钥解密。解密成功后,地址栏里的片段默认还在。关掉标签或离开页面时,阅读页会清掉文本框里的明文,但不会自动改掉地址。只有点了「从本页清除」,页面才会调用 history.replaceState,把当前地址收成「路径 + 查询参数」,去掉 # 及其后面的密钥。WHATWG 把 replaceState 定义成替换当前这一条会话记录,而不是再追加一条。清掉之后再关标签,「最近关闭的标签」恢复的就是已经没有密钥的地址。
服务器上的密文是否已删除,仍然只取决于创建时设定的次数和过期时间。清掉本页明文,不会替你多烧一次,也不会少烧一次。次数还没用尽时,谁拿到完整链接,谁仍可能再点「打开并查看」。次数用尽后,完整链接只能打开焚毁态,但会话历史、书签和聊天记录里那串地址还在。把阅后即焚链接贴进会生成预览的聊天之后次数为什么不一定被用掉,见把阅后即焚链接贴进会生成预览的聊天之后,阅读次数为什么不一定已经被用掉。本篇补的是接收方自己的浏览器记录,不是频道里的卡片。
明文框被清掉,会话历史仍可能带着 #。恢复后地址栏里还能看见密钥。
明文和片段都从这一条记录里拿掉。再恢复,通常只剩 ?id=。
再打开只会看到焚毁态。本机和聊天里那串地址不会因此自动消失。
当场怎么 核对照恢复
目标不是证明「所有浏览器永远都会同步片段」,而是证明:在你正在用的这台浏览器里,关掉标签之后密钥还在不在地址栏。
-
01
准备一条不会用于真实交接的测试内容
不要写入正在使用的 API Key 或登录密码。打开阅后即焚,输入例如
ClosedTab-20260911,次数保持默认 1,过期保持 24 小时。页面打开即用。下面的步骤只为对照会话历史,不把这段字交给同事当正式密钥。 -
02
用完整链接打开阅读页,先不要点「打开并查看」
生成后应看到
s.html?id=和#两段。在当前浏览器打开,页面应停在「密文还在」。看一眼地址栏,确认#后面有一串密钥。按 F12 打开网络面板:应能看到对状态接口的请求,请求 URL 里不应出现#后面那一段。 -
03
关掉这个标签,再从最近关闭的标签打开
关闭标签。在 Windows 或 Linux 上按 Ctrl+Shift+T,在 macOS 上按 ⌘+Shift+T。也可以走菜单「历史记录 → 最近关闭的标签页」。恢复后看地址栏:常见结果是
#和密钥都还在,页面再次停在「密文还在」。若这里密钥已经不见,记下你点过的是「从本页清除」还是只按了关闭,两步不是同一个动作。 -
04
需要时再对照书签或另一台已登录设备
把同一条测试链接加进书签,或在已打开「历史记录和标签页」同步的 Chrome 里查看「其他设备上的标签页」。另一台设备若出现同一条地址,核对照的是完整字符串里有没有
#,不是页面标题。Safari 开了 iCloud 标签时,用另一台已登录同一 Apple 账号的设备做同样的对照。测的是你自己的账号和浏览器,不要把结果写成「所有厂商都必然同步片段」。 -
05
最后才点「打开并查看」,再试一次「从本页清除」
现在点按钮,确认测试原文出现。接着点「从本页清除」,确认地址栏不再带
#。再关掉标签并恢复:常见结果是恢复后的地址只剩编号,缺少密钥,阅读页会提示缺密钥。这一步用来对照「关标签」和「先清除再关标签」不是同一状态。测完丢掉这条链接,不要改派给真实接收方。
若你接下来要把新密钥交给另一个人,不要先用真实密钥练习「关标签再打开」。测试内容和正式内容分开。正式交接仍然走阅后即焚;环境变量泄露后的第二轮风险,见云平台环境变量被拖走之后,新密钥为什么不该再发到聊天窗口。那篇写的是「不要把 API Key 本身贴进可搜索的记录」;本篇写的是「完整链接进了浏览器记录之后,关标签为什么不够」。
找回来之后 挡不住什么
把「我能从最近关闭的标签找回密钥」读成「只要关了标签,别人就拿不到」,会漏掉几条同样能核对的边界。
能按快捷键恢复标签的人,是这台浏览器配置文件的使用者。共享电脑、未锁屏的工位、借出去还没退登录的浏览器,都会让「最近关闭的标签」变成第二条取链通道。清掉最近关闭的列表、清掉历史,挡得住这一条捷径,挡不住已经复制到聊天、工单或截图里的完整网址。阅后即焚限制的是服务器上密文的寿命和次数,不是本机记录里那串地址还能被谁看见。
次数用尽之后,把链接从历史里再打开,通常只能看到焚毁态。这不能理解成「历史已经安全」。管理员、同事或你自己仍然能从那串地址读出:曾经存在过一条编号、曾经有人用片段当密钥。需要长期保存或多设备同步时,应使用专门的密码管理器。UsePwd 没有账号和密码库,也不能按用户找回丢失的链接。身份说明见关于。
文件是第三条路径。单文件不超过 5 GB 的本地备份,走文件加密盒,输出 .lock / .enc,文件默认不上传。口令本身用密码生成器在 6–128 位之间生成,再用密码检测看强度。这些页面和本篇一样打开即用。不要把「片段不进服务器日志」理解成「关标签等于销毁密钥」:日志、会话历史和聊天记录不是同一层。
关掉标签之后 常被问到的
下面四条只回答本篇的边界,不重复创建页上的按钮说明。
读完去 核对照一次关闭和恢复
文章回答「关掉标签之后,密钥为什么还能从最近关闭的标签找回来」。要当场生成一条不用于真实交接的测试链接再关一次标签,打开阅后即焚即可,不必先注册。