外部来源POST请求闲置90秒后Cookie丢失(Express+express-session示例)
核心成因
这个问题的本质是Cookie有效期设置与请求延迟的交互冲突,具体细节如下:
- 服务端给会话Cookie设置了约90秒的有效期(通过
Max-Age或Expires参数),当POST请求的提交延迟超过这个时间,Cookie已过期,浏览器会严格遵循HTTP协议,不再将过期Cookie附加到请求头中,因此req.headers.cookie会变为undefined。 - GET请求无此问题,是因为测试场景中GET请求的触发时机都在Cookie有效期内,或是浏览器对GET请求的缓存机制让请求在Cookie有效期内完成,未触发过期逻辑。
- 3DS支付场景的偶发登出,是因为用户被重定向到新标签页完成验证的时间偶尔超过90秒,返回原网站发起POST回调请求时,会话Cookie已过期,服务端无法识别用户身份,导致登出。
验证方向
可以检查服务端设置Cookie的代码,确认是否存在类似res.cookie('sessionId', value, { maxAge: 90000 })(90000毫秒=90秒)的配置,这会直接导致Cookie在90秒后过期。
内容的提问来源于stack exchange,提问作者Dmo
相关产品推荐
相关产品推荐

