Pantheon部署的Drupal站点Session Cookie无法在Chrome中保存
针对无头React + Pantheon + Drupal REST登录时,Chrome无法存储Session Cookie(Firefox正常)的问题,以下是具体排查和解决步骤:
1. 补充Cookie的SameSite属性
Chrome对跨域Cookie的SameSite属性有强制要求,未设置时会阻止存储,而Firefox兼容性处理更宽松。在Drupal的settings.php中添加配置,指定SameSite为None(需配合已有的Secure属性):
$settings['session.storage.options'] = [ 'cookie_samesite' => 'None', ];
2. 修正Drupal的CORS配置
确保CORS允许携带Credentials的请求,修改sites/default/services.yml:
cors.config: enabled: true allowedHeaders: - 'Content-Type' - 'X-CSRF-Token' allowedMethods: - 'GET' - 'POST' - 'OPTIONS' allowedOrigins: - 'https://你的React应用域名' # 替换为实际域名,不能用* exposedHeaders: - 'X-CSRF-Token' maxAge: 1000 supportsCredentials: true # 必须开启,允许Cookie跨域传输
注意:带Credentials的CORS请求不允许allowedOrigins使用通配符*,必须指定具体的React应用域名。
3. 验证域名匹配性
你的Session Cookie domain为.oursitename.pantheonsite.io,确保React应用的域名属于该二级域下(如app.oursitename.pantheonsite.io),否则Chrome会拒绝存储跨域Cookie。若React应用是独立域名,需调整Cookie的domain配置或使用反向代理统一域名。
4. 确保HTTPS协议一致性
Cookie带有Secure属性,仅能在HTTPS环境下传输和存储。确认React应用和Pantheon上的Drupal均使用HTTPS协议,本地开发时可使用HTTPS代理(如react-scripts start --https)模拟生产环境。
5. 检查Pantheon CDN设置
Pantheon的CDN可能篡改或丢失Cookie头,需在Pantheon仪表盘中确认:
- Session Cookie未被CDN缓存
- CDN未移除
SameSite或Secure属性
内容的提问来源于stack exchange,提问作者Misori

