- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我是新来的 flutter 。基本上我正在为我的 Web 应用程序使用代码 Igniter 框架。我为我的网络应用程序创建了 REST API,在用户使用 API 登录后,所有方法都会检查 session_id 如果它存在则继续,如果不存在则给出
{ ['status'] = false, ['message'] = 'unauthorized access' }
我正在使用 flutter 创建应用程序,当我使用 flutter 的 http 方法时,它会更改每个请求的 session 。我的意思是,它不维护 session 。我认为它每次都会破坏并创造新的联系。这是我用于 api 调用获取和发布请求的 thr 类方法。
class ApiCall {
static Map data;
static List keys;
static Future<Map> getData(url) async {
http.Response response = await http.get(url);
Map body = JSON.decode(response.body);
data = body;
return body;
}
static Future postData(url, data) async {
Map result;
http.Response response = await http.post(url, body: data).then((response) {
result = JSON.decode(response.body);
}).catchError((error) => print(error.toString()));
data = result;
keys = result.keys.toList();
return result;
}
我想发出 API 请求,然后存储 session_id,是否可以在服务器上维护 session ,以便我可以在自己的网络应用程序上管理身份验证。
最佳答案
HTTP 是一种无状态协议(protocol),因此服务器需要某种方式来识别客户端在向服务器发出的第二个、第三个和后续请求时。在您的情况下,您可能会使用第一个请求进行身份验证,因此您希望服务器在后续请求中记住您,以便它知道您已经通过身份验证。一种常见的方法是使用 cookies .
Igniter 发送一个带有 session id 的 cookie。您需要从每个响应中收集它并在下一个请求中将其发送回。 (服务器有时会更改 session ID(以减少我们还不需要考虑的点击劫持等事情),因此您需要不断从每个响应中提取 cookie。)
cookie 作为一个名为 set-cookie
的 HTTP 响应 header 到达(可能不止一个,但希望不是为了简单起见)。要发回 cookie,您需要在后续请求中添加一个名为 cookie
的 HTTP 请求 header ,复制您从 set-cookie
header 中提取的一些信息。
希望 Igniter 只发送一个 set-cookie
header ,但出于调试目的,您可能会发现使用 response.headers.forEach((a, b) 将它们全部打印出来很有用=> print('$a: $b'));
.你应该找到 Set-Cookie: somename=abcdef;可选的东西
。我们需要将字符串提取到,但不包括 ;
,即 somename=abcdef
在下一个和后续请求中,通过更改您的 post
,将请求 header 添加到您的 {'Cookie': 'somename=abcdef'}
的下一个请求中命令:
http.post(url, body: data, headers:{'Cookie': cookie})
顺便说一句,我认为您上面的代码中的 await
和 then
不匹配。通常,如果它们应该是顶级函数,那么您不希望在类中使用静态变量。相反,您可以创建一个 cookie 感知类,如:
class Session {
Map<String, String> headers = {};
Future<Map> get(String url) async {
http.Response response = await http.get(url, headers: headers);
updateCookie(response);
return json.decode(response.body);
}
Future<Map> post(String url, dynamic data) async {
http.Response response = await http.post(url, body: data, headers: headers);
updateCookie(response);
return json.decode(response.body);
}
void updateCookie(http.Response response) {
String rawCookie = response.headers['set-cookie'];
if (rawCookie != null) {
int index = rawCookie.indexOf(';');
headers['cookie'] =
(index == -1) ? rawCookie : rawCookie.substring(0, index);
}
}
}
关于Flutter http 维护 PHP session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50299253/
是否为每个 Shiny session 分配了 session ID/ session key (如果部署在 Shiny 服务器上)?如果是,我如何访问该信息?我已阅读文档here然而上网查了一下,并
我正在使用 this koajs session 模块。 我检查了源代码,但我真的无法理解。 我想知道它保存 session 数据的位置,因为我没有看到创建的文件,并且当服务器重新启动时, sessi
实现高可扩展性的一种方法是使用网络负载平衡在多个服务器之间分配处理负载。 这种方法提出的一个挑战是服务器是否具有状态意识 - 将用户状态存储在“ session ”中。 此问题的一个解决方案是“粘性
在负载平衡服务器的上下文中, session 亲和性和粘性 session 之间有什么区别? 最佳答案 我见过这些术语可以互换使用,但有不同的实现方式: 在第一个响应中发送 cookie,然后在后续响
我希望其他人向我解释哪种方法更好:使用 session 或设计无 session 。我们正在开始开发一个新的 Web 应用程序,但尚未决定要遵循什么路径。 无 session 设计在我看来更可取: 优
现在用户在他的权限中有很多角色,我将允许他点击 href 并在新窗口中扮演另一个角色。每个角色都有自己的 session 。 既然浏览器打开窗口不能用新 session 打开,我必须在服务器端想办法。
我正在尝试为express.js Node 应用程序实现 session 存储我的问题是: 如何删除具有浏览器 session 生命周期的 cookie(根据连接文档标记有 expires = fal
在开始在 golang 中使用 session 之前,我需要回答一些问题 session 示例 import "github.com/gorilla/sessions" var store = ses
我读过 Namespaced Attributes . 我尝试使用此功能: #src/Controller/CartController.php public function addProduct(
我正在努力完成以下工作: 根据用户的类型更改用户的 session cookie 到期日期。 我有一个 CakePHP Web 应用程序,其中我使用 CakePHP session 创建了我的身份验证
这是我在这里的第一个问题,我希望我做对了。 我需要处理一个 Java EE 项目,所以在开始之前,我会尝试做一些简单的事情,看看我是否能做到。 我坚持使用有状态 session Bean。 这是问题:
ColdFusion session 与 J2EE session 相比有什么优势吗? ColdFusion session documentation提到了 J2EE session 的优点,但没有
在执行任何任务之前,我需要准确地在创建 session 时创建一个 session 范围变量(因为我的所有任务都需要一个初始 session 范围变量才能运行)。因为,创建 session 时,gra
我们当前的应用使用 HTTP session ,我们希望将其替换为 JWT。 该设置仅允许每个用户进行一次 session 。这意味着: 用户在设备 1 上登录 用户已在设备 1 上登录(已创建新 s
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
假设我在两个或更多设备上打开了两个或更多用户 session (同一用户没有管理员权限)。 在当前 session 中,如果我注销,是否意味着所有其他 session 也会关闭?如果没有,有没有办法通
我正在评估在 tomcat 中使用带有 session 复制的粘性 session 的情况。根据我的初步评估,我认为如果我们启用 session 复制,那么在一个 tomcat 节点中启动的 sess
我开始使用 golang 和 Angular2 构建一个常规的网络应用程序,最重要的是我试图在 auth0.com 的帮助下保护我的登录.我从 here 下载快速入门代码并尝试运行代码,它运行了一段时
我在 Spring Controller 中有一个方法,它接受两个相同类型的参数其中一个来自 session ,另一个来自表单提交(UI)。 问题是在 Controller 方法中我的非 sessio
在我登录之前,我可以点击我的安全约束目录之外的任何内容。如果我尝试转到安全约束目录内的某个位置,它会将我重定向到表单登录页面。如您所料。 登录后,我可以继续我的业务,并访问我的安全约束内外的资源。
我是一名优秀的程序员,十分优秀!