ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PinchTab State 完整指南:浏览器会话状态的查看、加密保存与按需恢复

PinchTab State 完整指南:浏览器会话状态的查看、加密保存与按需恢复 【免费下载链接】pinchtabHigh-performance browser automation bridge and multi-instance orchestrator with advanced stealth injection and real-time dashboard.项目地址https://gitcode.com/gh_mirrors/pi/pinchtab点击查看免费下载pinchtab state是 PinchTab 中负责浏览器会话状态的核心命令族它既能实时查看某个标签页Tab的完整浏览器状态也能把 cookies、localStorage、sessionStorage等会话数据以命名文件的形式持久化到磁盘在后续会话中按名或按前缀一键恢复。本文以 docs/reference/state.md 为骨架结合 state 命令定义、HTTP 处理器 与 状态持久化实现 等源码完整覆盖 CLI 子命令、HTTP API、能力门控配置、加密存储格式与底层捕获/恢复原理帮助你用 PinchTab 实现「登录态存档、会话迁移、多标签页状态管理」等自动化场景。两种 State 视图完整浏览器状态与实时标签页状态PinchTab 的「状态」分两个层次用途完全不同使用前务必区分视图访问方式内容定位完整浏览器状态pinchtab state/GET /statecookies、当前源current-originlocalStorage、当前源sessionStorage、可选元数据需要导出/恢复的富状态视图受security.allowStateExport门控实时标签页状态GET /tabs/{id}/state页面readyState、导航进行中、网络空闲、对话框、可操作性actionability轻量的运行/就绪探针用于动作前的 readiness 检查当前源存储pinchtab storage ...当前源localStorage/sessionStorage的读写删轻量的存储操作视图GET /tabs/{id}/state返回的实时视图不包含 cookies 与持久化存储而是返回页面运行时信号。从 state_tab.go 的实现看其响应体包含readyStateloading/interactive/complete、navigationInProgress、networkIdle、dialogPresent、actionabilityready/caution/blocked等字段loading或interactive时 actionability 降级为caution存在待处理对话框时置为blocked。因此该端点适合作为动作执行前的低成本探针而需要完整会话快照时应使用GET /state。完整浏览器状态的组成由 state_capture.go 的响应结构 定义tabId、url、title等标签页基本信息cookies列表storage按 origin 组织的localStorage与sessionStorage键值对metadataorigin、user agent 等附加元数据。前置条件security.allowStateExport与加密密钥所有完整/保存状态操作含/storage系列路由都要求配置开启security.allowStateExporttrue否则请求会被拒绝。这一门控在路由层和能力层都有体现路由表中将stateExport能力映射到配置项security.allowStateExport拒绝时返回错误码state_export_disabled见 internal/routes/routes.go每个 handler 入口调用ensureStateExportEnabled统一拦截见 internal/handlers/state.go 与 storage.go测试用例 capability_refusal_test.go 明确断言/storage在未开启时返回stateExport/security.allowStateExport/state_export_disabled三元组。配置方式示例片段{ server: { stateDir: /path/to/state }, security: { allowStateExport: true } }server.stateDir状态目录根路径见 config_types.go 的 ServerConfig。保存的状态文件实际存放在{stateDir}/sessions/子目录下state.go 的 SessionsDirsecurity.allowStateExport总开关见 SecurityConfigsecurity.stateEncryptionKey加密密钥配置项SecurityConfig.StateEncryptionKey。服务端在实际加密/解密时通过环境变量PINCHTAB_STATE_KEY读取该密钥state.go handler密钥为空时加密保存直接返回 400state.go。仓库 e2e 配置可以佐证该开关的两种形态常规配置如 tests/e2e/config/pinchtab.json 中allowStateExport: true而 tests/e2e/config/pinchtab-secure.json 明确设为false用于验证拒绝路径。CLI 命令总览state命令及其子命令定义于 cmd_cli_state.goCLI 到 HTTP API 的调用映射在 internal/cli/actions/actions_state.go。pinchtab state [--tab id] pinchtab state list pinchtab state save [--name name] [--encrypt] [--tab id] pinchtab state load --name name-or-prefix [--tab id] pinchtab state show --name name pinchtab state delete --name name pinchtab state clean [--older-than hours]各子命令的 flags 要点来自 cmd_cli_state.go 的 initstate与state save、state load均支持--tab id指定目标标签页省略时作用于当前/活动标签页state save --name省略时自动生成名称格式为state-unix时间戳见 state.go 的 Savestate save --encrypt开启加密需要配置加密密钥见上文state load、state show、state delete的--name为必填state clean --older-than默认值为24小时。查看当前浏览器状态pinchtab state # 活动标签页的完整浏览器状态 pinchtab state --tab tabId # 指定标签页返回内容即上文「完整浏览器状态」的全部字段cookies、当前源存储、tabId/URL/title以及 origin、user agent 等元数据。底层由HandleStateCurrent调用captureBrowserState完成捕获state_capture.go。需要轻量化的运行/就绪视图时改用GET /tabs/{id}/state两种视图的分工在 endpoints.md 中有明确说明。保存当前浏览器状态pinchtab state save # 自动命名 pinchtab state save --name work-login # 指定名称 pinchtab state save --name checkout --tab tabId # 保存指定标签页 pinchtab state save --name work-login --encrypt # 加密保存要点省略--name时 PinchTab 自动生成state-时间戳名称--tab id从指定标签页捕获状态而非活动标签页--encrypt要求配置security.stateEncryptionKey服务端以PINCHTAB_STATE_KEY环境变量读取密钥缺失时请求被拒绝捕获过程通过桥接层读取 cookiesGetRawCookies并在页面上下文执行脚本枚举localStorage/sessionStorage同时采集 URL、title、origin、user agent 写入元数据captureBrowserState保存响应包含name、path、cookies数量、origins、encrypted等字段state.go。加载已保存的状态pinchtab state load --name work-login # 精确名称 pinchtab state load --name work-log # 前缀匹配取最新 pinchtab state load --name checkout --tab tabId要点--name既可精确匹配也接受前缀前缀匹配解析为最近保存的匹配项HandleStateLoad先尝试精确路径不存在时调用FindByPrefix取最新一条state_capture.go而 FindByPrefix / List 返回的结果按SavedAt降序最新在前加载会向目标标签页恢复 cookies 与当前源存储cookies 逐条通过SetRawCookie写入存储通过单次Evaluate批量注入见下文「恢复原理」响应包含name、cookiesRestored、storageItemsRestored、originsstate_capture.go。查看、删除与清理已保存状态pinchtab state list # 列出所有保存的状态文件 pinchtab state show --name work-login # 显示完整记录含元数据与存储载荷 pinchtab state delete --name work-login # 从磁盘删除 pinchtab state clean # 清理默认 24 小时前的文件 pinchtab state clean --older-than 72 # 清理 72 小时前的文件细节说明list返回每个文件的name、savedAt、origins、encrypted、sizeBytes摘要StateEntry。加密文件.json.enc由于 payload 是密文列表无法解析元数据savedAt/origins为空但encrypted标记正确List 实现show展示完整状态文件内容需要密钥才能读取加密文件HandleStateShowdelete先尝试删除.json.enc再尝试.jsonDeleteclean默认阈值 24 小时CLI flag 默认值与 handler 兜底逻辑均为 24见 cmd_cli_state.go 与 state.go按文件修改时间判定并同时处理两种扩展名Clean返回removed数量与olderThanHours。HTTP API 全览GET /state GET /state/list GET /state/show POST /state/save POST /state/load DELETE /state POST /state/clean参数契约详细说明见 endpoints.md端点参数说明GET /statequerytabId可选省略时使用当前标签页返回完整浏览器状态GET /state/list无列出状态文件摘要GET /state/showqueryname必填显示完整状态记录POST /state/savebodyname、encrypt可选、tabId可选、metadata可选捕获并持久化POST /state/loadbodyname必填、tabId可选恢复 cookies 与存储DELETE /statequeryname必填删除状态文件POST /state/cleanbodyolderThanHours可选默认 24清理过期文件所有端点均受security.allowStateExport门控endpoints.md。存储格式与安全细节状态持久化由 internal/state/state.go 独立实现关键设计如下文件布局与权限保存目录为{stateDir}/sessions/目录权限0700文件权限0600EnsureSessionsDir、Save明文文件使用.json扩展名加密文件使用.json.encfileExtension。StateFile 结构版本 1{ version: 1, name: work-login, savedAt: 2026-09-24T02:33:01Z, origins: [https://example.com], cookies: [], storage: { https://example.com: { local: {}, session: {} } }, metadata: {}, encrypted: false }对应 StateFile 定义 与 Cookie镜像 CDP network cookie 的name、value、domain、path、secure、httpOnly、sameSite、expires字段。加密机制采用 AES-256-GCM密钥由口令经 PBKDF2 派生100,000 次迭代、16 字节随机盐输出格式为salt(16B) || nonce || ciphertextEncrypt解密时先尝试 PBKDF2 派生密钥失败则回退到旧版 SHA-256 派生态兼容历史文件Decrypt加载时以文件扩展名.json.enc为准判断是否加密避免「配置了密钥但文件其实是明文」的误判同时用json.Valid兜底识别旧版未使用.enc扩展名的加密文件Load。写入安全采用「写临时文件 原子重命名」的方式防撕裂写加密载荷一旦截断GCM 认证必然失败等于整体丢失会话因此原子写至关重要Save 的注释与实现文件名经过sanitizeFilename净化去路径分隔符、..穿越、非法字符替换为_且保存/删除/解析路径均校验「解析后的路径不得逃逸 sessions 目录」防止路径穿越sanitizeFilename、Save、Delete。底层原理状态捕获与恢复捕获流程captureBrowserState通过桥接层GetRawCookies读取全部 cookies转换为state.Cookie在页面上下文执行一段脚本遍历localStorage与sessionStorage的全部键值并同时返回url、title、origin、navigator.userAgent脚本异常时仍返回部分数据并在metadata.storageError中记录错误信息组装StateFilesavedAt、origins、cookies、storage、metadata。整个捕获/加载过程包在 30 秒超时上下文中标签页解析走统一的guardedTabContext加载时额外带 handoff 暂停防护见 state_capture.go。恢复流程HandleStateLoad解析状态文件精确名优先前缀回退取最新逐条恢复 cookiesSetRawCookie按name、domain、path、secure、httpOnly、sameSite还原按 origin 恢复存储每个 origin 只发起一次Evaluate脚本内循环调用localStorage.setItem/sessionStorage.setItem避免每个键一次 CDP 往返restoreOriginStorage返回cookiesRestored与storageItemsRestored计数。TestHandleStateLoadBatchesStorage专门验证了这种批量恢复行为见 internal/handlers/state_test.go。测试与验证路径e2e 冒烟测试tests/e2e/scenarios/infra/state-basic.sh 覆盖了GET /state/list、POST /state/save、GET /state/show、POST /state/load含前缀匹配、DELETE /state含不存在名称的拒绝、POST /state/clean、自动命名保存等完整链路运行前提即security.allowStateExporttrue能力门控测试capability_refusal_test.go 验证存储路由在能力未开启时返回state_export_disabled单元测试internal/state/state_test.go 与 load_test.go 覆盖持久化、加密、前缀查找等底层逻辑。相关文档Tabs实时标签页操作与--tab id用法含cookies clear后可用state load恢复的提示SessionsAgent/会话认证Configserver.stateDir与 security 开关Endpoints/state路由索引与参数契约数据存储指南状态目录与其他持久化数据的布局说明。赞分享【免费下载链接】pinchtabHigh-performance browser automation bridge and multi-instance orchestrator with advanced stealth injection and real-time dashboard.项目地址https://gitcode.com/gh_mirrors/pi/pinchtab点击查看免费下载相关推荐lnav 会话Session机制详解自动保存与恢复日志查看状态lnav 会话Session机制详解自动保存与恢复日志查看状态 lnav 是一款面向日志文件的命令行导航工具其会话Session功能会在退出后自动记开发工具日志分析CLI老 Mac 免费升级最新 macOS 完整指南三次操作搞定自检、安装与修复老 Mac 免费升级最新 macOS 完整指南三次操作搞定自检、安装与修复 硬件还很耐用但系统更新已经被官方停止——这是 2007 2017 年款 Inte操作系统固件驱动开发告别模组混乱Diva Mod Manager带你体验《初音未来》模组管理新境界 告别模组混乱Diva Mod Manager带你体验《初音未来》模组管理新境界 还在为《初音未来歌姬计划 Mega Mix》的模组管理而头疼吗从网桌面应用游戏开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表