如何在Laravel Dusk中获取session数据?
Laravel Dusk 无法读取Session问题解决
根本原因
直接在测试脚本中调用Session::all()返回空属于正常现象,核心是两个运行环境完全隔离:
- Dusk 控制的浏览器进程与测试脚本的CLI进程相互独立,浏览器访问应用时生成的Session属于应用服务的上下文
- 测试脚本中直接调用
Session门面读取的是当前CLI进程的会话存储,与浏览器侧使用的Session无关联
可用的读取方案
方案1:通过临时测试路由获取
仅在测试环境下新增返回Session数据的路由,Dusk访问该路由即可拿到对应数据:
- 在
routes/web.php中添加测试路由:
if (app()->environment('testing')) { Route::get('/dusk-get-session', fn() => response()->json(Session::all())); }
- 在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
相关产品推荐
相关产品推荐

