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

使用Fetch API请求时session_start()在Chrome/Edge中无响应

问题分析与解决方案

核心原因

PHP 默认通过文件锁机制管理会话,调用 session_start() 时会独占当前会话的文件锁,直到脚本执行完毕或主动释放锁。Chrome/Edge 与 Firefox 在请求处理时序上的差异,导致该锁阻塞问题仅在 Chromium 内核浏览器中出现:原页面的会话锁未及时释放时,后续的 fetch 请求会一直等待锁资源,而 Firefox 可能在页面渲染完成后就触发了锁释放流程。

解决方案

  1. 主动释放原页面的会话锁
    在原页面的 PHP 代码末尾添加 session_write_close(),确保页面加载完成后立即释放会话锁,让后续的 fetch 请求能正常获取锁资源:
<?php
$sessionRs = session_start();
var_dump($sessionRs);
session_write_close(); // 主动释放会话锁
?>
<button onclick="fetch('fail.php', { method: 'POST' }).then();">Test</button>
  1. 优化目标请求的会话启动方式
    如果 fail.php 仅需读取会话数据、无需写入操作,可以使用 read_and_close 参数启动会话,获取数据后立刻释放锁,避免不必要的阻塞:
<?php
// fail.php 中的代码
session_start([
    'read_and_close' => true,
]);
// 后续业务逻辑处理
?>
  1. 检查输出缓冲配置
    若服务器开启了输出缓冲,可能导致原页面的 PHP 脚本无法及时执行完毕。可以添加缓冲刷新指令确保脚本正常结束:
<?php
$sessionRs = session_start();
var_dump($sessionRs);
ob_flush();
flush();
session_write_close();
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:15:32