什么是浏览器会话?状态、隔离与生命周期

什么是浏览器会话?

Scrapeless Agent Browser 支持受管浏览器会话和可重用配置文件,适用于在步骤之间需要连续性的工作流。

浏览器会话是一段浏览器活动以及赋予该活动连续性的状态。这一边界的确切含义取决于上下文:用户可能指浏览器保持打开的时间,网站可能指一次已认证的交互,而自动化服务可能指一个具有自身生命周期的受管浏览器实例。

这些含义有重叠但并不相同。一个打开的标签页可以在浏览器继续运行的情况下丢失网站登录。浏览器可以关闭,而已保存的配置文件仍保留 cookie。远程客户端可以断开连接,却不一定能证明其浏览器已被终止。可靠的自动化首先要明确工作流实际依赖的是哪一种会话生命周期。

被称为“会话”的不同生命周期

浏览器、网站、页面和自动化会话描述了不同形式的连续性。每种都有自己的创建事件、状态和结束条件。

会话含义延续的内容可能的结束条件
浏览器运行时正在运行的浏览器及其活动上下文浏览器关闭或服务到期
网站认证服务器认可的账户访问登出、凭证撤销或过期
页面会话与标签页关联的页面状态与存储相关浏览上下文关闭
自动化连接客户端的控制关系断开连接或会话终止

在任务记录中使用这些区分。“会话已过期”这一诊断不完整,除非它标明是哪一种生命周期。服务生命周期结束,与网站撤销认证,或页面导航至不同文档,各自需要不同的处理方式。

在任务开始前定义期望的连续性。如果工作流只读取公开信息,一个干净的浏览器上下文可能更合适。如果要延续一个已授权账户的任务,需要明确哪些状态必须持久化,以及谁可以访问这些状态。

Cookie 将请求与网站状态连接起来

Cookie 让浏览器可以存储值,并在后续 HTTP 请求中附带匹配的值。网站可以使用 cookie 引用服务端会话、存储偏好设置,或支持其他应用功能。

“ HTTP cookie 模型 ”区分了 cookie 的生命周期与作用域。会话 cookie 通常缺少持久化的过期属性,而持久化 cookie 具有明确的生命周期。浏览器的会话恢复行为会使“关闭窗口总能立即移除所有会话 cookie”这一假设变得复杂。

Cookie 过期与认证过期也不同。在服务器停止接受某个会话之前,对应 cookie 仍可能保存在本地。反过来,删除本地 cookie 会阻止浏览器提交一个仍然存在的服务端会话引用。

为了诊断问题,应通过适合的应用检查来记录认证是否有效。仅仅存在一个名称熟悉的 cookie 还不够。避免在日志中暴露 cookie 值,因为它们可能直接充当访问凭证。

Session storage 与 local storage 具有不同边界

Session storage 和 local storage 是浏览器的两种存储机制,具有不同的作用域与生命周期。它们都不是完整浏览器会话的别名。

“ sessionStorage 的边界 ”与源及顶级浏览上下文绑定。在该页面会话内,它可以在页面重新加载后继续存在,而关闭相关标签页通常会结束它的生命周期。新打开的页面可能具备特定的“打开者相关”行为,因此需要针对你所使用的上下文创建路径进行测试。

“ localStorage 机制 ”会在普通浏览器会话之间保存与源关联的数据,受浏览器策略和用户清理操作的影响。它不会像 cookie 那样被附加到每个请求上;应用脚本对其进行读写。

应用可以组合多种存储。偏好设置可能存在于本地存储中,账户引用可能在 cookie 中,而临时界面状态则可能仅存在于内存中。复制某一种存储并不能保证重建所有存储。

记录具体的持久化需求。“在多次运行之间保留账户偏好设置”比“保持会话”更有用,因为前者可以与实际应用行为进行验证。

浏览器上下文在同一运行时中划分状态

浏览器上下文是一种隔离边界,许多自动化客户端通过它来暴露页面及关联的浏览器状态。其确切行为与可用控制取决于客户端与浏览器的实现。

同一上下文中的多个标签页可以共享应当保持一致的状态,比如同一站点的 cookie。分离的上下文则可支持独立任务,而不会刻意共享这些状态。这在同时测试未登录体验与已授权登录体验时非常有用。

上下文隔离并不意味着所有环境信号都不同。两个上下文仍然可能使用同一浏览器构建版本、操作系统和网络路径。需要判断该任务是要求存储隔离、环境隔离,还是两者都需要。

使用明确的上下文归属。某个工作单元应当知道是哪项任务创建了某个上下文,以及它何时可以将其关闭。重用一个未标识的全局上下文,很容易让一个任务继承另一个任务的偏好设置或账户数据。

已保存的配置文件是未来会话的输入

已保存的浏览器配置文件会保留选定的浏览器数据以供重复使用,而实时会话则包含当前运行时和已打开的文档。配置文件并不是对每个活动页面进程的完整快照。

假设某个已授权的工作流设置了首选市场,之后又返回同一个应用程序。配置文件可以帮助保留相关偏好。下一次运行仍然需要导航、加载应用程序,并确认该偏好处于激活状态。服务器可以独立更改其对已保存状态的解释。

配置文件重用应是有意为之。按账户或工作流分配所有权,并防止同时进行的任务对同一状态做出相互冲突的更改。在设计共享配置文件访问之前,先确认提供方支持的并发和持久化行为。

同时规划删除和轮换策略。不再需要的配置文件中可能仍然保留敏感工件。将保留期限与任务的重要性和持续时间相匹配,避免将真实用户状态导出到通用用途的调试目录中。

远程会话过期是一个基础设施边界

远程浏览器的生命周期是围绕浏览器资源的服务级边界。它不会延长网站身份验证的有效期,也不能保证客户端在过期后仍然能够重新连接。

选择一个覆盖预期有界任务的生命周期,并在工作完成后关闭浏览器。让浏览器一直运行会消耗资源,并在超出应用程序需要的时间范围内保留状态。

在所选客户端和服务中区分“断开连接”和“关闭”。某个操作可能仅分离控制程序,而另一个操作可能会结束浏览器。其确切语义是已记录连接路径的一部分,因此在构建续接行为之前应先进行验证。

如果某项任务需要人工审核,请明确指出暂停发生的位置,以及授权用户如何重新获得控制权。不要假设已保存的 URL 能够重建内存中的表单、待上传内容或尚未完成的应用事务。

诊断丢失的连续性

应通过识别是哪种状态或生命周期发生了变化来诊断丢失的连续性。先从可观察的页面入手,然后追踪相关的边界。

如果应用显示登录界面,请检查浏览器是否处于预期的上下文中,以及网站是否仍然识别身份验证。如果偏好设置已更改,请检查配置文件选择和存储策略。如果连接已断开,在对其标签页进行推理之前,先确认浏览器运行时是否仍然存在。

保留一个最小的诊断记录:任务标识、浏览器会话引用、适用时的配置文件引用、最终页面 URL,以及缺失的预期状态。敏感状态值通常不应出现在该记录中。

将状态丢失与内容更改区分开来。网站可以在浏览器会话保持不变的情况下更改控件标签或响应格式。使用已知的配置文件和浏览器环境重现该问题,有助于确定连续性是否确实是问题的原因。

使用 Scrapeless Agent Browser 进行会话规划

Scrapeless 代理浏览器 提供托管会话并 可重复使用的浏览器配置文件这些功能涵盖了连续性的不同部分:一个用于运行当前的浏览器工作流,另一个则可以在多次运行之间保留受支持的浏览器数据。

根据任务选择全新或持久化的环境。公共页面检查可能受益于已知的干净状态。有授权账户的任务可能需要一个具有明确所有者和保留策略的命名配置文件。无论哪种情况,在打开页面后都要验证应用程序状态。

该 浏览器使用工作流 为运行托管浏览器的代理提供相关上下文。 无抓取方案 考虑到预期的浏览器生命周期和工作负载。

结论

浏览器会话是一个连续性边界,但这个边界必须被精确定义。Cookie、页面存储、上下文、配置文件、网站认证以及远程浏览器的生命周期都可能在不同时间结束。明确界定任务所需的状态,有意识地将其隔离,在导航后进行验证,并在任务完成时将其清理。

为浏览器状态赋予清晰的生命周期

探索 Scrapeless Agent 浏览器会话和配置文件,满足对明确所有权、持久化和清理的需求。

今天注册即可获得 5 美元的免费额度 — 无需信用卡.

领取您的 $5 额度 →

常见问题

问:关闭浏览器标签页会将我从网站登出吗?

关闭标签页并不会在所有情况下将你从网站登出。身份验证取决于 Cookie、服务器端会话规则以及应用程序的行为,而不仅仅取决于该标签页是否存在。

问:sessionStorage 是浏览器会话吗?

SessionStorage 是一种存储机制,它的作用范围限定在某个源(origin)和页面会话内。浏览器会话则包含更广泛的运行时和状态相关内容。

问:已保存的个人资料会一直保持登录状态吗?

已保存的配置文件无法保证永久登录。网站可能会使与保留的浏览器状态关联的身份验证过期或撤销。

问:不同的标签页可以共享 Cookie 吗?

同一浏览器上下文中的标签页可以共享相同的 Cookie。当任务不应共享账号状态时,请使用刻意的上下文或配置文件隔离。

问:恢复工作流后应检查什么?

恢复的工作流在采取进一步操作之前,应验证目标账号、文档和应用状态。仅凭现存的连接或配置文件引用并不能证明任务仍停留在预期步骤。

参考文献