Flutter 如何从标题中获取Flatter Web中的cookie?
颤振Web应用程序发送一个HTTP REST API POST请求,并返回一个JSON响应和设置cookie头中的cookie,如下所示 (颤振(通道测试版,1.22.0,在Microsoft Windows上) 提取cookie时,响应似乎找不到标头值。调用和提取代码为:Flutter 如何从标题中获取Flatter Web中的cookie?,flutter,cookies,flutter-web,Flutter,Cookies,Flutter Web,颤振Web应用程序发送一个HTTP REST API POST请求,并返回一个JSON响应和设置cookie头中的cookie,如下所示 (颤振(通道测试版,1.22.0,在Microsoft Windows上) 提取cookie时,响应似乎找不到标头值。调用和提取代码为: var response = await http.post(url, headers: {"Content-Type": "application/json"}, body: js
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在头中。那么,如何在Flatter Web中提取它呢
实际上,我的最终目标是将cookie与其他每个请求一起发送回去。但这似乎不是在浏览器中自动发生的。因此,如果有人能够指出处理这种情况的正确方法,这也是一个很好的解决方案
非常感谢您的帮助。谢谢。这个问题是一个月前提出的,但我的回答可能会对其他人有所帮助。 Flatter Web中的Cookie由浏览器管理-它们会自动添加到请求(到Cookie标头),如果Cookie以前是由set Cookie设置的-更准确地说,当您发布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';
}
//与服务器上的端口号相同
请记住,在Flatter Web中,网络请求是通过浏览器XMLHttpRequest发出的。谢谢您的回答。我已经通过使用承载令牌解决了我的问题,但下次我将使用此解决方案。这个回答今天真的救了我一命,谢谢。这对我的用例非常有用。
BrowserClient
未定义,这是一个很好的解决方案软件包提供了它?import”软件包:http/browser\u client.dart“;
forbrowser客户端
对我不起作用。仍然没有cookies。。。
flutter run -d chrome --web-port=61656