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

Dart/Flutter中如何使用HTTP请求会话保持登录认证状态

Dart/Flutter 中HTTP会话复用实现方案

Dart官方的http包提供了和Python requests.Session功能对等的会话管理能力,具体实现如下:

方案1:使用http包自带Client自动管理会话

http.Client实例会自动存储所有请求响应返回的Cookie,同个实例发起的后续请求会自动携带已存储的Cookie,实现会话复用:

  1. 全局创建可复用的Client实例
import 'package:http/http.dart' as http;

// 作用等同于requests.Session()
final httpClient = http.Client();
  1. 使用该实例发起登录请求
Map<String,String> data = {'username':'user','password':'pass'};
var loginUrl = Uri.parse('https://example.com/login');
var loginResponse = await httpClient.post(loginUrl, body: data);
  1. 复用同个实例发起后续请求,自动携带认证信息
var profileUrl = Uri.parse('https://example.com/myprofile');
// 无需手动添加任何头信息,Cookie会自动携带
var profileResponse = await httpClient.get(profileUrl);

注意:会话使用完毕后需要调用httpClient.close()释放资源,避免内存泄漏。

方案2:手动管理Cookie实现会话复用

如果需要自定义Cookie处理逻辑,可以手动提取登录响应的Cookie,后续请求手动注入:

// 登录请求后提取响应头中的Cookie
String? authCookie = loginResponse.headers['set-cookie'];

// 后续请求手动携带Cookie
var profileResponse = await http.get(profileUrl, headers: {
  'Cookie': authCookie ?? ''
});

如果需要更复杂的会话能力,比如Cookie持久化、多域名会话隔离等场景,也可以使用封装更完善的第三方HTTP库,自带开箱即用的会话管理能力。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 02:27:03