You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel Dusk中获取session数据?

Laravel Dusk 无法读取Session问题解决

根本原因

直接在测试脚本中调用Session::all()返回空属于正常现象,核心是两个运行环境完全隔离:

  • Dusk 控制的浏览器进程与测试脚本的CLI进程相互独立,浏览器访问应用时生成的Session属于应用服务的上下文
  • 测试脚本中直接调用Session门面读取的是当前CLI进程的会话存储,与浏览器侧使用的Session无关联

可用的读取方案

方案1:通过临时测试路由获取

仅在测试环境下新增返回Session数据的路由,Dusk访问该路由即可拿到对应数据:

  1. 在routes/web.php中添加测试路由:
if (app()->environment('testing')) {
    Route::get('/dusk-get-session', fn() => response()->json(Session::all()));
}
  1. 在Dusk测试代码中调用:
$sessionData = json_decode(
    $browser->visit('/dusk-get-session')->element('body')->getText(),
    true
);

方案2:通过SessionID直接读取存储

首先获取浏览器携带的SessionID,再从Session存储中查询对应数据:

// 获取浏览器侧存储的SessionID
$sessionId = $browser->cookie(config('session.cookie'))->getValue();
// 读取并解析Session数据
$sessionData = unserialize(Session::driver()->read($sessionId));

该方案不适用于cookie类型的Session驱动,cookie驱动的Session数据加密存储在客户端,需要额外解密处理。

补充说明

Dusk的设计初衷是模拟真实用户的前端操作行为,真实用户场景下不会直接读取Session数据,因此官方没有提供直接读取Session的封装方法,文档也没有相关说明,按照上述方案即可正常获取需要的Session内容。

内容的提问来源于stack exchange,提问作者leoden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:45:02