Flutter中如何保存并传递Cookie?适配网页设计的后端API
浏览器会自动维护Cookie池,登录后后续请求能自动带上Cookie,但Flutter没有内置该机制,需借助第三方包配合实现,以下是基于dio的具体做法:
首先添加依赖到
pubspec.yaml:dependencies: dio: ^5.x.x dio_cookie_manager: ^2.x.x cookie_jar: ^4.x.x注:版本号选用最新稳定版即可
初始化Dio并配置Cookie管理器(全局仅需初始化一次):
import 'package:dio/dio.dart'; import 'package:dio_cookie_manager/dio_cookie_manager.dart'; import 'package:cookie_jar/cookie_jar.dart'; // 创建持久化Cookie存储(若无需持久化,可改用MemoryCookieJar,仅存内存,重启APP即消失) final cookieJar = PersistCookieJar( storage: FileStorage('your_local_cookie_path'), // 指定本地存储路径 ); // 初始化Dio实例 final dio = Dio(); // 给Dio添加Cookie管理器拦截器 dio.interceptors.add(CookieManager(cookieJar));登录及后续请求的写法(Cookie会被自动处理):
// 登录请求 dynamic res = await dio.get("/login-api", queryParameters: requestParams); // 登录成功后,响应头里的Set-Cookie会被自动保存到cookieJar // 后续其他请求,会自动从cookieJar读取并携带Cookie dynamic data = await dio.get("/other-api");手动操作Cookie(可选):
// 获取指定域名下的Cookie List<Cookie> cookies = await cookieJar.loadForRequest(Uri.parse("your_api_domain")); // 手动删除指定域名的Cookie await cookieJar.delete(Uri.parse("your_api_domain"));
关键说明
PersistCookieJar会将Cookie持久化到本地,APP重启后依然有效;若仅需临时存储,使用MemoryCookieJar即可。- 拦截器会自动处理请求的
Cookie头和响应的Set-Cookie头,完全模拟浏览器的Cookie管理逻辑。
内容的提问来源于stack exchange,提问作者Wallace
相关产品推荐
相关产品推荐

