Flutter中HttpClient丢失Session Cookie问题求助
问题原因
PHP的Session依赖PHPSESSID Cookie识别用户会话:当你发起设置$_SESSION['user']的请求时,服务器会在响应头返回Set-Cookie: PHPSESSID=xxx,但你的Flutter代码里的HttpClient默认没有自动保存、携带Cookie的机制,导致后续请求没带上这个PHPSESSID,服务器无法关联到之前创建的会话,因此返回$_SESSION['user']未设置的提示。
解决方案
给静态HttpClient配置自动Cookie管理:修改静态变量初始化代码,给HttpClient绑定CookieJar实例,让它自动处理Cookie的保存与发送。
修改后的代码:
static String serverUrl = 'https://myServerURL.de'; // 配置CookieJar自动处理会话Cookie static HttpClient client = HttpClient()..cookieJar = CookieJar(); static String query(String f, Map<String, String> d, Function(dynamic) callback) { String args = d.entries.map((e) => '&${e.key}=${Uri.encodeComponent(e.value)}').join(''); String url = '$serverUrl/sql.php?f=$f$args'; client.getUrl(Uri.parse(url)) .then((HttpClientRequest request) => request.close()) .then((HttpClientResponse response) => response.transform(Utf8Decoder()).listen((response) { var res = jsonDecode(response); callback(res['data']); })); return ''; }
额外检查点
- 确认PHP服务器的
session.cookie_domain配置和请求域名(myServerURL.de)一致,否则Cookie会被客户端忽略。 - 确保所有请求都复用同一个
HttpClient实例(你已通过静态变量实现,无需调整)。
内容的提问来源于stack exchange,提问作者Jens
相关产品推荐
相关产品推荐

