使用Flask app.test_client结合自定义会话数据库时无法获取Session ID
我在Flask应用中实现了对接数据库的自定义会话管理,使用app.test_client()模拟请求时遇到了Cookie读取异常的问题。
测试请求代码
with app.test_client() as client: if method == 'GET': response = client.get(path, query_string=qParams, headers=headers)
已确认请求头headers中包含Cookie: session=03594...。
自定义会话的open_session方法
def open_session(self, app, request): sid = request.cookies.get(app.config['SESSION_COOKIE_NAME']) # sid is always None when using test_client if not sid: sid = self.generate_sid() return self.session_class(sid=sid, new=True) val_str = self.tbObj.get(sid) if val_str is not None: data = json.loads(val_str) return self.session_class(data, sid=sid) return self.session_class(sid=sid, new=True)
问题现象
使用app.run()启动应用时,会话管理一切正常;但使用app.test_client()模拟请求时,open_session方法中request.cookies始终为空,导致无法从Cookie中获取会话ID(sid),该问题仅出现在测试场景中。
已尝试的操作
- 验证过
open_session函数在正常运行场景下功能正常 - 确认测试时
request.cookies确实为空 - 临时解决方案:将sid存入
app.config,再在open_session中读取
疑问
- 为何在
test_client测试场景下request.cookies为空? - 如何确保
test_client中Cookie(尤其是会话Cookie)被正确传递和获取?
内容的提问来源于stack exchange,提问作者Hengyue Li
相关产品推荐
相关产品推荐

