【问题标题】:How to get a cookie in Flutter Web from header?如何从标题中获取 Flutter Web 中的 cookie?
【发布时间】:2021-01-22 06:36:54
【问题描述】:

Flutter Web 应用程序发送 HTTP REST API POST 请求并返回 JSON 响应和 Set-Cookie 标头中的 cookie,如下所示。

(Flutter(频道测试版,1.22.0,在 Microsoft Windows 上)

提取 cookie 时,响应似乎找不到标头值。调用和提取代码为:

var response = await http.post(url, headers: {"Content-Type": "application/json"}, body: jsonEncode(data));

if (response.statusCode == 200) {
  var cookie = response.headers['set-cookie'];
  print('cookie: $cookie');
}

控制台结果是:

cookie: null

服务器端在 Docker 容器中的 ASPNet.Core 3.1 上运行,但这应该不是问题,因为 cookie 位于标头中。那么,如何在 Flutter Web 中提取呢?

实际上,我的最终目标是将 cookie 与其他所有请求一起发回。但它似乎不会在浏览器中自动发生。因此,如果有人能指出处理这种情况的正确方法,这也是一个很好的解决方案。

感谢任何帮助。谢谢。

【问题讨论】:

    标签: flutter cookies flutter-web


    【解决方案1】:

    这个问题是一个月前提出的,但我的回答可能对其他人有帮助。 Flutter Web 中的 Cookie 由浏览器管理 - 如果 cookie 之前由 Set-Cookie 设置,它们会自动添加到请求(到 Cookie 标头)中 - 更准确地说,当您执行 release build 时它可以正常工作. 就我而言,它在开发构建期间不起作用。我的解决方案:

    在服务器集标头上:

    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Origin: http://localhost:61656
    

    //端口号可能不同

    在颤动中: 班级成员:

    final http.Client _client = http.Client();
    

    // 例子

    Future<String> getTestString() async {
        if (_client is BrowserClient)
          (_client as BrowserClient).withCredentials = true;
        await _client.get('https://localhost/api/login');
        await _client.get('https://localhost/api/login');
        return 'blah';
      }
    

    http.Client() 如果 dart:io 可用,则创建一个 IOClient ;如果 dart:io 可用,则创建一个 BrowserClient dart:html 可用 - 在 Flutter Web 中 dart:html 可用。 将 withCredentials 设置为 true 会使 cookie 工作。

    运行您的应用:

    flutter run -d chrome --web-port=61656
    

    // 与服务器相同的端口号

    请记住,在 Flutter Web 中,网络请求是使用浏览器 XMLHttpRequest 发出的。

    【讨论】:

    • 感谢您的回答。我已经通过使用不记名令牌作为解决方法解决了我的问题,但下次我将使用此解决方案。
    • 今天这个答案真的救了我,谢谢。这非常适合我的用例。
    • BrowserClient 未定义,是哪个包提供的?
    • import 'package:http/browser_client.dart'; for BrowserClient
    • 我尝试了这些步骤(Chrome 发布模式、设置服务器标头、使用 http.Client 并启用 withCredentials),但没有成功。仍然没有 cookie。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2020-03-19
    • 1970-01-01
    • 2011-09-05
    • 2022-08-18
    • 2021-04-25
    • 2023-04-09
    相关资源
    最近更新 更多